【练习】计算1!+2!+...+n!之和

时间:2023-01-10 18:48:36

方法1用2层循环控制,外部决定1到10(阶乘数的变化),内部负责计算阶乘,最后把每次阶乘相加

注意:

(1)外部循环每进来一次(i变一次)将sum重置1,否则sum是上一个数字的阶乘

#include <stdio.h>
int main ()
{
int i=0,j=0,sum=1,n=0,N=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
sum=1; //i每变一次,将sum重置1,不然sum是上一次算下来的阶乘
for(j=1;j<=i;j++)
{
sum=sum*j; //1-n之间垒乘
}
N=N+sum;
}
printf("%d",N);
return 0;
}

方法2:这种方法相对于上一种比较优化,就是比如说你要计算5!不需要从一乘到5,直接利用前面得到的结果4!直接乘以5即可,程序简单很多

注意:

(1)直接输出ret=ret*i的话,是1到n的累乘(n的阶乘),如果ret=ret*i;sum=sum+ret;放在循环里执行,
最后输出sum的话,是计算1!+2!+。。。n!之和
(2)这种算法相当于比如说计算5!,不要从1乘到5,直接用4!乘以5,其他的类似
int main ()
{
int i=0,ret=1,n=0,sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
ret=ret*i; //从1开始累乘
sum=sum+ret; //1!,2!...n!累加
}
printf("%d",sum);
return 0;
}