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

这个代码就是计算n的阶乘之和,我想算法应该没有问题,因为我试了几个数都对了。重点是,重点是,这个阶乘和中的n要大于等于1,小于等于20,所以我就不知道怎么处理了,计算从1... 这个代码就是计算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);
}
展开
 我来答
yuhezcb0755
2013-06-28 · TA获得超过643个赞
知道小有建树答主
回答量:237
采纳率:0%
帮助的人:117万
展开全部
看错了,原来是求阶乘和。
你把sum和a变量类型改成unsigned long long型, 这样可以表示20位数。

printf("%llu\n", sum);
表示的再大也有限的,阶乘到后面数字都是很大。
cqpcy
2013-06-28 · TA获得超过658个赞
知道小有建树答主
回答量:746
采纳率:66%
帮助的人:365万
展开全部
关于阶乘 数值都会很大,c语言默认的数据类型存储大小均有限,很容易造成数据溢出,无法表示很大的数值 如int 65535 超出即溢出出错
建议你更改算法处理 灵活运用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
程序猿3号
2013-06-28 · TA获得超过1811个赞
知道小有建树答主
回答量:1029
采纳率:33%
帮助的人:771万
展开全部
最后 的printf改成这样:
printf("%lf",sum);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
汪刚cs
2013-06-28 · TA获得超过112个赞
知道答主
回答量:147
采纳率:0%
帮助的人:84.6万
展开全部
你进行的运算都是整数运算,sum类型不应该定义为long double这种浮点类型,定义为长整型long类型就行了,printf("%d",sum);
,不然直接运行的话会出问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式