从题目可得,需要两层for循环,
第一层进行相加的次数,第二层则是计算每项阶乘的值;
#include<stdio.h>
#include <windows.h> //防闪;-)
int main()
{
int n = 1;
int t = 0;
int fin = 0;
for (n = 1; n <=10; n++)
{
int sum = 1;
for (t = 1; t <= n; t++)
{
sum = sum*t;
}
fin += sum;//将各项加
}
printf("%d",fin);
system("pause");
return 0;
}
但是这种算法内层每次都会做重复的运算,比如4!=3!*4,从此思路出发,即可大大简化运算量和程序长度。
int main()
{
int n = 1;
int t = 0;
int fin = 0;
int sum = 1;//循环中与乘法相关得复合赋值符 *= 初始乘数不得为0;
for (n = 1; n <= 10; n++)
{
sum *= n; //目的是将每次阶乘得计算结果累乘,避免重复迅速运算
fin += sum;//将每次累计得值相加
}
printf("%d", fin);
system("pause");
return 0;
进而更能得出1!+……n!的值
#include<stdio.h>
#include<Windows.h>
int main()
{
int x = 0;
int n = 0;
int t = 0;
int fin = 0;
scanf_s("%d", &n);
int sum = 1;//循环中与乘法相关得复合赋值符 *= 初始乘数不得为0;
for (x = 1; x <= n; x++)
{
sum *= x; //目的是将每次阶乘得计算结果累乘,避免重复迅速运算
fin += sum;//将每次累计得值相加
}
printf("%d", fin);
system("pause");
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/e96b3090178d898534388a99353bae41.png)