什么是阶乘和?
比如 5的阶乘和 = 1!+2!+3!+4!+5!= 1+2+6+24+120 = 153
常规算法f1 需要两个for循环,那么如何只使用一层循环来求阶乘和呢?
#define _CRT_SECURE_NO_WARNINGS #include//常规算法(两个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; } void main(int argc, char* argv[]) { printf("n请输入一个整数:"); long n; scanf("%d" ,&n); printf("n %d的阶乘和:%d n",n, f1(n) ) ; printf("n %d的阶乘和:%d n", n, f2(n)); }
看代码执行效果:



