c语言 1到20的阶乘之和

//c4-8.c
#include<stdio.h>
int main ()
{ int i,p,sum=0;
for(i=1;i<=20;i++)
{ while(i>=1)
{ p=1;
p*=i;
i-=1;
}
sum+=p;
}
printf("sum=%d\n",sum);
return 0;
}
错在哪

/**
**程序描述:求求1~20的阶乘之和。
**算法思路:先求出每一项的阶乘值,然后将所有项的阶乘值相加。
*/
#include <stdio.h>
#define N 20
typedef unsigned long long uInt64;  //自定义类型
//求出每一项阶乘值的函数
uInt64 fact(int n)
{
    int i;
    uInt64 s;
    for(i=s=1;i<=n;i++)
        s*=i;   //从1开始循环累加相乘
    return s;
}
 
int main()
{
    uInt64 s;
    int i;
    for(i=1,s=0;i<=N;i++)
        s+=fact(i);     //从第1项开始循环累加每一项的阶乘值
    printf("1!+2!+3!+……+20!=%llu\n",s);
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-08

i始终大于1,会出现死循环的,同时,20的阶乘相加,那结果会很大的,用int保存不下,得用double类型!示例代码,有问题再用度娘自己搜索吧。。

//win7 x64 + vc6.0编译通过
#include<stdio.h>
#include "stdlib.h"
int main()
{
double fac(int n);
double sum=0,m;
    int i;
for(i=1;i<=20;i++)
m=fac(i);
sum+=m;
printf("%0.lf\n",sum);
system("pause");
}
double fac( int n)
{
double m;
if (n==1)
m=1;
else m=fac(n-1)*n;
return(m);
}

第2个回答  2014-11-23
你的程序有点乱,也有的错的地方,比如一开始的int unit51()不应该是int main()吗?还有倒数第三行printf("1到20的阶乘和为:\n",sum);也是错的,应该改为printf("1到20的阶乘和为:%d\n",sum);但是貌似这样最后输出的也只有一个数而不是1到20的阶乘,最后一点,20的阶乘是一个非常大的数,用int根本不行。程序就不给你改了,需要的话我给你写一个。
第3个回答  2013-12-15
#include<stdio.h>void main()
{
int i;
double t=1,sum=0; //由于20的阶乘int和long int都放不下.所以用double.
for(i=1;i<=20;i++) //从1循环到20.
{
t = t * i; //计算1~20的阶乘.
sum = sum + t; //将1~20的阶乘累加到sum中.
}
printf("%.0f\n",sum); //输出sum.
}
第4个回答  2012-04-19
2432902008176640000
请按任意键继续. . .

代码:
#include<stdio.h>
#include "stdlib.h"
int main()
{
double fac(int n);
double sum=0,m;
int i;
for(i=1;i<=20;i++)
m=fac(i);
sum+=m;
printf("%0.lf\n",sum);
system("pause");
}
double fac( int n)
{
double m;
if (n==1)
m=1;
else m=fac(n-1)*n;
return(m);
}

你求的是阶乘的累加和。20项很大了,查过了整形的范围了。用double就可以了。
在就是 递归表达式:
n==1 return 1
else
return n*f(n-1)
相似回答