谭浩强C++课后习题4——求1!+2!+…+n!
题目描述:求1!+2!+3!+…+n!
算法思路1:
用一个函数求一个数的阶乘,然后循环n次,计算每个数的阶乘然后相加。(注意:阶乘数较大,最好不用int)
#include<iostream>
using namespace std;
float function(int num) {
float result = 1;
for (int i = 1;i <= num;i++) {
result *= i;
}
return result;
}
int main() {
int n;
cout << "输入n:";
cin >> n;
float result = 0;
for (int i = 1;i <= n;i++) {
result += function(i);
}
cout << "result=" << result << endl;
return 0;
}
但是计算每个数的阶乘会浪费大量的计算,比如计算3和4的阶乘,计算完3的阶乘后只需乘4就是4的阶乘,不需要重复计算。
算法思路2:
用number存储每个数的阶乘,循环到下一个数的时候只需要乘以这个数,不需要重新计算前面的阶乘。(也可用全局变量或静态变量存储上一个数的阶乘,方法类似)
#include<iostream>
using namespace std;
int main() {
float result = 0;
float number = 1;
int n;
cout << "输入n:";
cin >> n;
for (int i = 1;i <= n;i++) {
number *= i;
result += number;
}
cout << "result=" << result << endl;
return 0;
}
运行测试结果: