c语言计算1到20的阶乘的和,我的代码哪错了?

#include<stdio.h>
main()
{
int n=0,i=1;
double sum=0;
for(n=0;n<20;n++)
{i=i*(n+1);
sum=sum+i;
}
printf("sum=%lf\n",sum);
return 0;
}
运行结果:4563008025.000000

找了很久,结果不对啊,到底哪错了呢?求大大解答下,万分感谢啊!
我知道了,i定义为int太小了,因为后面有i=20!。- -,这些错误太难找了。

在32伟环境下,20的阶乘已经超出int的范围,而i是个int,必然会溢出,结果就是错误的

把i定义成double就行了

#include<stdio.h>
main()
{
int n = 0;
double i = 1.0;  //double
double sum = 0; 
for (n = 0; n<20; n++)
{
i = i*(n + 1);
sum = sum + i;
}
printf("sum=%lf\n", i);
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-11-15
关键你这代码算的根本不是1到20的阶乘求和,单是20的阶乘就已经是2.4乘以10的18次方了。算这个题目要用两个for函数的。
第2个回答  2017-11-29
int i改为long long i
相似回答