有关于数据处理方面的c语言问题 大神请进!!!

这个代码就是计算n的阶乘之和,我想算法应该没有问题,因为我试了几个数都对了。重点是,重点是,这个阶乘和中的n要大于等于1,小于等于20,所以我就不知道怎么处理了,计算从1到20的阶乘之和,结果就会出现怪怪的乱七八糟的数。。。哎,求解答

#include<stdio.h>
int main(void)
{
int n,i,j,a;
long double sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
a=1;
for(j=i;j>=1;j--)
a=a*j;
sum=sum+a;
}
printf("%Ld",sum);
}

看错了,原来是求阶乘和。
你把sum和a变量类型改成unsigned long long型, 这样可以表示20位数。

printf("%llu\n", sum);
表示的再大也有限的,阶乘到后面数字都是很大。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-28
关于阶乘 数值都会很大,c语言默认的数据类型存储大小均有限,很容易造成数据溢出,无法表示很大的数值 如int 65535 超出即溢出出错
建议你更改算法处理 灵活运用
第2个回答  2013-06-28
最后 的printf改成这样:
printf("%lf",sum);
第3个回答  2013-06-28
你进行的运算都是整数运算,sum类型不应该定义为long double这种浮点类型,定义为长整型long类型就行了,printf("%d",sum);
,不然直接运行的话会出问题
相似回答
大家正在搜