KiraEx 2021-04-17 11:21 采纳率: 100%
浏览 85
已采纳

#include <stdio.h> void main() { int m,n,z; doub

#include void main() { int m,n,z; double sum=0; for(m=1;m<=20;m++) { for(n=1,z=1;n<=m;n++) { z*=n; } sum+=z; } printf("%lf\n",sum); } 求问C中1到20的阶乘之和这么求有哪里错了吗? 一直求不对,希望有大佬帮忙解答。
  • 写回答

1条回答 默认 最新

  • 正在学C++ 2021-04-17 12:19
    关注

    因为int最大表示2^31-1,也就是2147483647(21亿)。但是12!是4亿多,13!是62亿多。20!有19位

    你用z(int)来存放每个数的阶乘,到了13!之后就出错了,z就不是正确的阶乘结果。导致你的sum出错。

    你可以把所有变量全用long long int,这个在64位机上可以表示8个字节,可以达到19位,刚好可以记录20!,不可以记录21!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 chaquopy python 安卓
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题