C语言脑筋急转弯

来源:百度知道 编辑:UC知道 时间:2024/05/13 11:15:16
题目:求1+2!+3!+...+20!的和

#include <stdio.h>
int main()
{
int i,j;
long sum,s=0;
for(i=1;i<=20;i++)
{
sum=1;
for(j=1;j<=i;j++)
{
sum*=j;
}
s+=sum;
}
printf("Sum is:%ld",s);
getchar();
getchar();
return 0;
}

这个程序错误在哪?为什么
来送分给大家^_^
不用试,这是可以运行的

很简单,20!已经超过longint了

你把阶乘的数保存在数组或者字符串里面吧,你这样直接算是不行的。数据溢出了。
比如4的阶乘
用个数组Arr先保存4,然后做乘3的操作4*3=12那么原来的数组Arr[0]=2,Arr[1]=1;然后Arr[0]*2,Arr[1]*2结果就是Arr[0]=4;Arr[1]=2;
最后4的阶乘的结果就是24。有进位的,比如Arr[0]的初始值是4乘了3以后就将进位的值加到Arr[1]里面。没有进位的就直接乘。
C的语法很久不用了,但是阶乘算法是这样的。你参考下吧。