給定正整數 a (1-9) 和 n (1-9),求 S = a + aa + aaa + ... + n個a。
通項公式:
T₁ = aT₂ = aa = a×10 + a = T₁×10 + aTₖ = Tₖ₋₁ × 10 + a#include <stdio.h>
int main() {
int a, n;
printf("輸入 a 和 n (1-9): ");
scanf("%d %d", &a, &n);
if (a < 1 || a > 9 || n < 1 || n > 9) {
printf("輸入超出範圍\n");
return 1;
}
long long sum = 0;
long long term = 0; // 使用 long long 防止溢出
for (int i = 1; i <= n; i++) {
term = term * 10 + a; // 通項遞推
sum += term;
}
printf("s = %lld\n", sum);
return 0;
}
輸入: 2 3
過程:
i=1: term=2, sum=2
i=2: term=22, sum=24
i=3: term=222, sum=246
輸出: s = 246
term = term * 10 + a 避免字符串操作,效率高long long 安全利用等比數列求和公式可 O(1) 計算:
// S = a/9 * [ (10^1-1) + (10^2-1) + ... + (10^n-1) ]
// = a/9 * [ (10^(n+1)-10)/9 - n ]
long long sum = a * ( (pow(10, n+1) - 10) / 9 - n ) / 9;
注意:浮點運算可能引入精度誤差,循環法更穩健。
int 導致溢出(n=9, a=9 時超過 231-1)