C语言求1到n的阶层之和

我的代码如下,但为什么19之前的阶层之和都对,但从19开始就不对了,跟正确的数字差了7,而20就更不对,而且差的更大
#include <stdio.h>
void main()
{
int i;
double f=1,sum=0;

for(i=1;i<=20;i++)
{ f=f*i;
sum=sum+f;
}
printf("1到20的阶层数之和为%lf\n",sum);
}

不对吧?多于1~3后,无论是多少的阶乘之和,最末一位肯定是3才对吧?因为1!+2!+3!+4!=33,而从5!开始,末尾都是0,已不会影响33中的个位3了……所以,2432902008176640000和2561327494111820300都不会是1~20的阶乘之和的正确结果!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-06
int i;
ULONGLONG f=1,sum=0;

for(i=1;i<=20;i++)
{
f=f*i;
sum=sum+f;
}
printf("1到20的阶层数之和为%I64d\r\n",sum);

///

2432902008176640000是20阶乘,而不是1到20阶乘之合

1到20的阶乘之和是2561327494111820313
第2个回答  2014-11-06
超过数据类型的长度了本回答被提问者采纳
第3个回答  2014-11-06
程序没错的,你怎么知道结果错的追问

一个一个验算过去的,从1到18的阶层都对,但从19开始就错了,你也可以按按计算机,就按1到20的阶层之和,是2432902008176640000,而我的程序结果是2561327494111820300,我算到19的阶层的时候相差7,但20就差那么多,也不知道是什么有问题

追答

2561327494111820300是正确结果,你按计算机按错了吧

相似回答