题目 1064: 二级C语言-阶乘数列

求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;
}

你可能感兴趣的:(算法,c++,数据结构)