永发信息网

C++编译程序:求1!+2!+3!+4!+…+20!

答案:6  悬赏:40  手机版
解决时间 2021-08-12 20:27
  • 提问者网友:疯孩纸
  • 2021-08-12 14:22

求1!+2!+3!+4!+…+20!  

我用win-tc编译的,编译没有错,调试不成功,求高人指点。以下是我自编内容:

 

#include "stdio.h"

void main()

{

    long int i,n,s;

    n=1;s=0;

    for(i=1;i<=20;i++)

    {

    n=n*i;

    s=s+n;

    printf("%ld",s);

    }

 

      getch();

}

最佳答案
  • 五星知识达人网友:过活
  • 2021-08-12 14:39

不行,20!太大了,你得用float或double类型。


long int 只能表示到-2147483647到2147483647,最多到12!再往上就溢出,表示不了了

全部回答
  • 1楼网友:动情书生
  • 2021-08-12 19:44

循环算法不对

应该这样:

int n=1,sum=0;

for(int i=1;i<20;i++)   //循环计算1~20

{

  for(int j=1;j<=i;j++)  //计算1~20 每个数的阶乘

  {

    n=n*j;

  }

sum=sum+n;  //20个数的阶乘相加

}

不知上面的循环算法是否合理

其实还有一种方法,那就是用递归的方法,这样的话,是最明了的

  • 2楼网友:污到你湿
  • 2021-08-12 18:43
数据溢出,20!至少相当于2的4次方乘(20-16+1)次,即2的20次方,再至少相当于2的3次方乘(15-8+1)次,即相当于2的24次方,因此从20*19*18....*8至少相当于2的44次方。。。unsign long 的数据可以表示的范围应该是0~4294967295(2^32),long型则还要被负数范围分去一半,float同样为单精度,无法超越机器的32位限制。如果换成双精度浮点型(double)应该能满足你的需要了。在X86平台上,INTEL提供扩展的double精度(扩展精度是80位,即10个字节),一般在C语言表示时,使用12个字节表示一个double,12个字节的精度表示起来也就是2的48次方……目前的微型机x86平台2的53次方是机器运算精确的极限。以上所指都指的是我们的微型机,不涉及大型计算机。
  • 3楼网友:轻雾山林
  • 2021-08-12 17:15

vc编译结果

  • 4楼网友:纵马山川剑自提
  • 2021-08-12 16:22
很久没用TC了 你试一下用getchar函数替代getch函数,或添加conio.h头文件
  • 5楼网友:杯酒困英雄
  • 2021-08-12 15:33

这个东西是什么 http://www.19yxw.com/803890??????????? 、

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯