1到20阶乘的和用c语言表达

如题所述

#include <stdio.h>

long jiecheng(int x)

{

long int i,k=1;

for(i=1;i<=x;i++)

k=k*i;

return k;

}

int main()

{

long int j,k=0;

int i;

for(i=1;i<=20;i++)

{

j=jiecheng(i);

k+=j;

}

printf("%ld\n",k);

}

扩展资料

使用其他方法实现求1到20阶乘的和:

public class Main{

public static void main(String[] args){

int i,j;

int sum=0;

int a=1;

for(i=1;i<=20;i++){

for(j=1;j<=i;j++){

a*=j;

}

sum+=a;

}

System.out.print("sum=1!+2!+3!+...+20!="+sum);

}

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-09

一、算法分析:

计算阶乘和分成两步:

1 计算阶乘。 对于n的阶乘,从1累乘到n即可。 

2 每个阶乘相加。 

于是算法可以设计为,从1到20循环,计算每个数的阶乘,并累加。 

由于n!=(n-1)! *n, 所以每次计算阶乘,可以利用上次的结果,减少运算量。 

二、代码实现:

#include <stdio.h>
int main()
{
long long fac=1, s=0;//fac用来存储阶乘,s用来存储阶乘和。
int i;
for(i = 1; i <= 20; i ++)//循环20次
{
fac*=i;//计算阶乘
s+=fac;//累加
}
printf("%lld\n", s);//输出结果

return 0;
}

三、输出结果:

2561327494111820313

四、注意事项:

1 由于20阶乘和很大,达到2.56*10^18,所以32位的int是存储不下的。 必须使用64位的long long。 否则会出现溢出现象。 

2 如果是VC/VS一类的IDE,会不支持long long, 需要修改类型为__int64。

本回答被网友采纳
第2个回答  2017-04-12
#include<stdio.h>
int jiecheng(int n);
int main(void)
{
int sum = 0;
for (int i = 1; i <= 20; i++)
{
sum+=jiecheng(i);
}
printf("%d\n", sum);
return 0;
}
int jiecheng(int n)
{
int k = 1;
for (int i = 1; i <= n; i++)
{
k = k*i;
}
return k;
}
第3个回答  2018-04-09
少了一个循环好吧,误人子弟