求1+2!+3!+4!+…+30!。
科学计数法,保留两位小数。
测试答案是2.74e+32;
这题纯折磨,说一下学到了什么:
(1)科学计数法两种输出方法(保留2位小数):
1、printf("%.2e",sum);
2、利用iomanip头文件的 scientific setprecision(2)
(2)当题目要求保留小数的时候,多用double、float型的...
特别是这题,用temp算每一项的阶乘,没用double型导致数据丢失。吃大亏了。
sum是累和,双层循环--外层是每一项乘法の最大数,比如30、29等等。
内层是每一项根据最大の数阶乘到1的值。
纯折磨的题目。
- #include
- #include
- using namespace std;
-
- //求1!+2!+3!+4!+...+30!
- int SumN(int n) {
- double sum = 0; //经典の累和
- double temp = 1; //乘法
- for (int i = 1; i <= n; i++) { //阶乘从1到30
- temp = 1; //再初始化,下一层继续乘
- //for (int j = 1; j <= i; j++)
- for (int j = i; j > 1; j--) {
- temp = temp * j;
- }
- sum = sum + temp;
- }
-
- /*printf("%.2e", sum);*/
- cout << scientific << setprecision(2) << sum << endl;
-
- return 0;
- }
-
- int main() {
- //int n;
- //cin >> n;
- //SumN(n); //前n项的阶乘和
- SumN(30);
-
-
-
- return 0;
- }