计算 100 阶乘中的数字总和

2023-12-14

编辑 - 更改标题以匹配实际的问题陈述。

我正在编写一个函数来计算 100 中的数字之和!但我似乎有两个大问题。

  1. 实际结果100!仅精确到前几个数字(实际结果为 933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979 20827223758251185210916864000000000000000000000000)

  2. 我将结果数字的数字相加的方法没有输出正确的结果。

这是我当前的代码:

void factorialSum()
{
    double fact100 = factorial(100);
    double suma = 0;

    printf("100! is equal to: %.0f", fact100);

    while (fact100 > 0)
    {
        double temporal = fmod(fact100, 10);
        suma = suma + temporal;
        fact100 = fact100/10;
    }
    printf("\nThe sum of all digits in 100! is: %.0f", suma);
}

函数 Factorial() 定义为:

double factorial (double n)
{
    double mult = 1;
    double i = n;

    while (i>=1)
    {
        mult *= i;
        i = i - 1;
    }
    return mult;
}

该程序输出 9332621544394410218832560610857526724094425485496057150916691040040799506424293714863269403045051289804298929694447489 8258737204311236641477561877016501813248 结果为 100!并表示其数字之和等于 666。

如有任何帮助,我们将不胜感激,谢谢。


In C, a double通常具有 53 位精度,对应于 16 或 17 位精度。所以一旦你超越了22!, a double无法再表示准确的结果,如以下代码所示。请注意,在23!,尾随零消失,因为double不再代表精确值。

#include <stdio.h>
#include <stdint.h>

int main( void )
{
    double y;

    y = 1;
    for ( int i = 2; i < 30; i++ )
    {
        y *= i;
        printf( "%2d %32.0lf\n", i, y );
    }
}

这是程序的输出

 2                                2
 3                                6
 4                               24
 5                              120
 6                              720
 7                             5040
 8                            40320
 9                           362880
10                          3628800
11                         39916800
12                        479001600
13                       6227020800
14                      87178291200
15                    1307674368000
16                   20922789888000
17                  355687428096000
18                 6402373705728000
19               121645100408832000
20              2432902008176640000
21             51090942171709440000
22           1124000727777607680000
23          25852016738884978212864
24         620448401733239409999872
25       15511210043330986055303168
26      403291461126605650322784256
27    10888869450418351940239884288
28   304888344611713836734530715648
29  8841761993739700772720181510144

如果你想计算精确的值100!你需要使用数字数组(又名bignums),进行计算。您可以找到一个 bignum 库来使用,或者自己实现 bignum 乘法。维基百科关于 bignums 的文章提供了伪代码用于计算阶乘。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算 100 阶乘中的数字总和 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • Postgres:在 int 数组中查找最大值?

    使用 Postgres 9 3 有人可以解释一下为什么我不能直接在未嵌套的数组上使用 max 函数吗 据我了解 unnest 函数返回一个 setof 就像 select 语句一样 那么为什么这个查询的简短版本不起作用呢 我在概念上遗漏了一
  • 哪里是保存用户上传的图像的最佳位置

    我有一个显示画廊的网站 用户可以从网络上传自己的内容 通过输入 URL 或从计算机上传图片 我将 URL 存储在数据库中 这对于第一个用例来说效果很好 但如果用户从计算机上传 我需要弄清楚在哪里存储实际图像 这里有什么建议或关于我应该存储这
  • 如何在 Java 中初始化字节数组?

    我必须在 java 中以字节数组形式存储一些常量值 UUID 我想知道初始化这些静态数组的最佳方法是什么 这就是我目前正在做的 但我觉得一定有更好的方法 private static final byte CDRIVES new byte
  • 将 java.sql.Timestamp 转换为即时时间

    从我的数据库中我检索值如下 20 DEC 17 10 15 53 000000000 AM 我想要上面的java sql Timestamp转换为即时时间 2017 12 20T10 15 53Z 我尝试使用当前时间戳 Timestamp
  • rasa_nlu如何使用lookup_tables进行实体提取?

    我正在尝试使用 rasa nlu 和 rasa core 开发一个聊天机器人 但我没有得到 rasa nlu 如何使用 Lookup tables 进行实体提取的链接 我已经经历过 http blog rasa com improving
  • 使用 WMI 枚举音频输入设备

    我在我的 C 项目中使用 NAudio 我正在寻找一种枚举音频输入设备 麦克风等 的方法 这样我就可以获得它们的全名 不仅仅是我可以从 NAudio 获得的 31 个字符的长名称 我浏览了一些帖子 其中人们使用 WMI 枚举音频输出设备 M
  • 为什么这有效?删除多个 from 无子查询

    我不确定这是否是 SQL Server 2012 中的错误 我有一个简单的查询 DELETE FROM TABLE1 FROM TABLE2 WHERE TABLE1 COL1 1 在SSMS中 这段代码解析没有错误 并从Table1没有错
  • 如何在 WPF 中操作另一个类的窗口对象

    我是 WPF 和 C 新手 我了解很多 VB NET 并且习惯了调用文本框等表单对象的方式 我从另一个表单调用它 现在 我正在使用WPF 我很困惑 因为我有一个主窗口 我想从类将项目添加到主窗口中的列表框 在VB Net中 就是这样 IN
  • 当不在 python 中的正确包中时,不会捕获异常

    编辑 好的 我成功地隔离了该错误以及重现该错误的准确 完整的代码 但它要么是设计使然 要么是 python 中的错误 创建两个兄弟包 admin General 每个都有自己的 init py 当然 包装内admin将以下代码放入文件 te
  • 轻松使用 ASP.NET Identity 作为角色提供者

    我刚刚花了两天时间研究并使用现有数据库实现新的 ASP NET Identity 系统 更多信息请参见这里 将 ASP NET Identity 集成到现有的 DbContext 中 现在 我有一份工作UserStore and RoleS
  • 从 Kafka 消费失败迭代器处于失败状态

    我在使用来自 kafka 的消息时遇到异常 org springframework messaging MessagingException Consuming from Kafka failed nested exception is j
  • 每日查询计数,并具有多周的日期限制

    我正在尝试每天查找 个活跃用户 用户在创建后即处于活动状态多于每周 10 个请求 共 4 个连续几周 IE 2014 年 10 月 31 日 如果用户在以下时间段内每周发出的请求总数超过 10 个 则该用户处于活动状态 2014年10月24
  • 如何同步 JMeter 线程组

    我用 JMeter 填充数据库 有 2 个线程组并行填充 2 个表 填充这两个表后 我需要启动最后一个线程组来填充第三个表 我该怎么做 是否可以同步 JMeter 线程组 您可以为第三个线程组创建一个 while 控制器 并执行如下操作 线
  • 通常大数会变成负数

    自从我开始使用 eclipse 进行 euler 项目以来 我注意到大数字有时会变成看似随机的负数 我想这与传递类型的边界有关 如果您能向我解释这些负数是如何生成的以及其背后的逻辑是什么 我将很高兴 另外 我怎样才能避免它们 最好不要使用
  • 是否可以像 dcast 一样在 tidyr 中的多列上使用扩展? [复制]

    这个问题在这里已经有答案了 我有以下虚拟数据 library dplyr library tidyr library reshape2 dt lt expand grid Year 1990 2014 Product LETTERS 1 8
  • Delphi反编译[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 与使用其他编程语言 编译器构建的其他可执行文件相比 为什么反编译 delphi exe 如此容易 有一些东西可以帮助逆向delphi程序 您可以获得完整的表单数据 包括事件处理程
  • 如何在 IIS 中仅使用特定参数重定向 url

    我有一个如下所示的网址 www mywebsite com page aspx code 1 a 我想通过 IIS 将此 URL 重定向到 www mywebsite com page aspx code 1 b 我想通过 IIS 而不是在
  • INET6_ATON 和 NTOA 函数的 Oracle PL/SQL 版本?

    有没有什么好的代码可以将 IPv6 地址字符串转换为整数 使用一种格式转换 IPv4 似乎相当容易 但是 IPv6 有几种不同的地址显示格式 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX
  • 如何使用我自己的图像提供 Cifar10 训练模型并获取标签作为输出?

    我正在尝试使用基于训练的模型Cifar10教程并且想喂食 它与外部图像 32x32 jpg 或 png 我的目标是能够获得标签作为输出 换句话说 我想向网络提供尺寸为 32 x 32 3 个通道 没有标签的单个 jpeg 图像作为输入 并进
  • 计算 100 阶乘中的数字总和

    编辑 更改标题以匹配实际的问题陈述 我正在编写一个函数来计算 100 中的数字之和 但我似乎有两个大问题 实际结果100 仅精确到前几个数字 实际结果为 9332621544394415268169923885626670049071596