第一次写的代码,相当于分别算出1!,2!,3!...完全没有考虑阶乘之间的联系。
改进之后节省了很多计算量,一个很简单的改进。利用的是(n+1)!=n!*(n+1);
为了练习自己对函数传参的训练,之前用的是无返回值函数,传入地址进行操作。这次使用的是传入普通变量,然后返回结果进行操作。
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int add_fac(int n)//add_fac(n)=1!+2!+...+n!,直接返回结果
{
int add = 0;
int ret = 1;//用于保存阶乘
for (int i = 0; i < n; i++)
{
for (int j = i+1; j <= i+1; j++)//确保每次进入只循环一次,目的是乘以后面一个数
{
ret *= j;
}
add += ret;
}
return add;
}
int main()
{
int n = 0;
scanf("%d", &n);
printf("%d\n", add_fac(n));
return 0;
}