求Sn = a + aa + aaa + aaaa + aaaaa 的和

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// 先把每一项求出来,再求和
// 第1项 2
// 第2项 22 = 20 + 2 = 2*10 + 2 = 2*10^1 + 2*10^0
// 第3项 222 = 200 + 20 + 2 = 2*100 + 2*10 +2 = 2*10^2 + 2*10^1 + 2*19^0
// 第4项 2222 = 2*10^3 + 2*10^2 +2*10^1 + 2*10^0

// 创建出第n项的内容
int CreatNum(int a, int n) {
	if (a > 9 || a <= 0 || n<= 0) {
		return 0;
	}
	int num = 0;
	// i:10的指数
	for (int i = 0; i < n; ++i) {
		// pow 返回值是 double,  double*int = double, double+int = int,丢失精度
		num += a*(int)pow(10, i);
	}
	return num;
}
int main() {
	printf("%d\n", CreatNum(2, 5));
	int a = 1;
	int sum = 0;
	for (int i = 1; i <= 5; ++i) {
		sum += CreatNum(a, i);
	}
	printf("sum = %d\n", sum);
	system("pause");
	return 0;
}

具体这个代码是是可以通过改变CreatNum的参数来计算不同数字的任意多项的和。还有本题需要注意的一点是power的返回值是double类型,而double*int = double, double+int = int,这样会丢失精度,所以为了避免出现这个警告,可以加上一个强转类型。

猜你喜欢

转载自blog.csdn.net/qq_43508801/article/details/84146552