什么是阶乘和?
比如 5的阶乘和 = 1!+2!+3!+4!+5!= 1+2+6+24+120 = 153
常规算法f1 需要两个for循环,那么如何只使用一层循环来求阶乘和呢?
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//常规算法(两个for循环)
long f1(long n)
{
long sum = 0;
long tem = 1;
for (int i = 0; i < n; i++)
{
tem = 1;
for (int j = 1; j <= i + 1; j++)
{
tem *= j;
}
sum += tem;
}
return sum;
}
// 只用一个for循环实现阶乘和
long f2(long n)
{
long sum = 0;
long tem = 1;
//后一个阶乘 = 前一个阶乘 x 当前数
for (int i = 1; i <= n; i++)
{
tem *= i;
sum += tem;
}
return sum;