计算 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 阶乘中的数字总和 的相关文章

  • 如何在MVVM中管理多个窗口

    我知道有几个与此类似的问题 但我还没有找到明确的答案 我正在尝试深入研究 MVVM 并尽可能保持纯粹 但不确定如何在坚持模式的同时启动 关闭窗口 我最初的想法是向 ViewModel 发送数据绑定命令 触发代码来启动一个新视图 然后通过 X
  • 将复选框添加到 UniformGrid

    我正在尝试将复选框动态添加到 wpf 中的统一网格中 但看起来网格没有为它们分配足够的空间 所以它们都有点互相重叠 这就是我将它们添加到后面的代码中的方法 foreach string folder in subfolders PathCh
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • 将数组向左或向右旋转一定数量的位置,复杂度为 o(n)

    我想编写一个程序 根据用户的输入 正 gt 负 include
  • UML类图:抽象方法和属性是这样写的吗?

    当我第一次为一个小型 C 项目创建 uml 类图时 我在属性方面遇到了一些麻烦 最后我只是将属性添加为变量 lt
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • 如何返回 json 结果并将 unicode 字符转义为 \u1234

    我正在实现一个返回 json 结果的方法 例如 public JsonResult MethodName Guid key var result ApiHelper GetData key Data is stored in db as v
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • C++ 复制初始化和直接初始化,奇怪的情况

    在继续阅读本文之前 请阅读在 C 中 复制初始化和直接初始化之间有区别吗 https stackoverflow com questions 1051379 is there a difference in c between copy i
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 防止索引超出范围错误

    我想编写对某些条件的检查 而不必使用 try catch 并且我想避免出现 Index Out of Range 错误的可能性 if array Element 0 Object Length gt 0 array Element 1 Ob

随机推荐

  • 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