C语言求1至n的阶乘和问题?

麻烦高手看一下这个程序,谢谢。#include<stdio.h>
int main()
{
int i;
int p=1,sum,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
p=p*i;
}
sum+=p;
printf("%d\n",sum);
}私心想着本可以出来的么,怎么结果那般的相差巨大?还有下面的这个,不知道究竟对不对呢,前面的数值验证了没错,可后面的(n>33)就会发生溢出。请高手大侠的详细说一下啊啊啊,有关溢出怎么处理。for (int i = 1; i <= n; i++)
{
m *= i;
total1 += m;
}

下面是我给你改好的代码
#include<stdio.h>
int main()
{
int i,n;
double p=1,sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
p*=i;
sum+=p;
}
printf("%lf\n",sum);
}

有几点你要注意一下,int是什么数据类型你应该知道,取值范围也知道吧,你输入33,你自己想象33的阶乘是多大的值,超出int范围肯定溢出啊,所以这里建议改为double型
还有你那个sum+=p,调到for循环里面,在外面的话只会执行一次,就是把p的最终值加上sum的初始值0,然后赋值给sum,这不就相当于直接把p的值赋给sum吗,所以我给你改成那样了,你自己看看吧
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-12-16
私心想着好歹改改便可以给楼主交差,可一看程序,真真是不行滴~~,我只有给楼主多改了改,这次必定是极好的。至于如何防止溢出,尽量不要算那么大的数,应该就可以了吧,我碰到的溢出问题不多。程序如下,请笑纳~~~如果还有何疑问,请尽管问~~~

#include<stdio.h>
int main()
{
int i,j;
int a[100],sum=0,n;
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=1;j<=i+1;j++)
{
if(j==1)
a[i]=1;
else
a[i]*=j;
}
}

for(i=0;i<n;i++)
sum+=a[i];

printf("%d\n",sum);
return 0;
}本回答被网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网