给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯A(N个A)。例如A=1, N=3时,S=1+11+111=123。
输入格式:
输入数字A与非负整数N。
输出格式:
输出其N项数列之和S的值。
输入样例:
1 3
输出样例:
123
代码
#include <stdio.h>
int main() {
int a, n; scanf("%d %d", &a, &n);
int b[100001] = {0};
int carry = 0,top = 0;
// 第 i 位(从0开始)会被累加 (n - i) 次 a
for (int i = 0; i < n; i++) {
int cnt = n - i; // 当前位需要累加的次数
int sum = b[i] + a * cnt + carry;
b[i] = sum % 10; // 当前位结果
carry = sum / 10; // 进位
if (i > top) top = i;
}
while (carry) {
top++;
b[top] = carry % 10;
carry /= 10;
}
for (int i = top; i >= 0; i--) {
printf("%d", b[i]);
}
return 0;
}