第 k 項:a_k = a_{k-1} * 10 + d (d=2),a_1 = d。
求前 n 項和 S_n。
s = a; // 錯誤:a 未初始化,且首項未加入
for (i = 1; i < b; i++) {
a = a*10 + 2;
s += a; // 先生成下一項,再加 → 漏掉首項 2
}
#include <stdio.h>
int main() {
int d, n; // 數字 d, 項數 n
printf("輸入數字 和 項數 (如 2 5 表示 2+22+222+2222+22222): ");
scanf("%d %d", &d, &n);
if (d < 0 || d > 9 || n <= 0) { printf("參數無效\n"); return 1; }
long long sum = 0;
long long term = 0;
for (int i = 1; i <= n; ++i) {
term = term * 10 + d; // 先生成當前項
sum += term; // 再累加
printf("第%d項: %lld\n", i, term);
}
printf("總和: %lld\n", sum);
return 0;
}
a_k = d * (10^k - 1) / 9 (等比級數和)。
S_n = d/9 * [ (10^{n+1} - 10)/9 - n ] = d * (10^{n+1} - 9n - 10) / 81。
long long sum_formula(int d, int n) {
long long p10 = 1;
for (int i = 0; i <= n; ++i) p10 *= 10; // 10^{n+1}
return d * (p10 - 9*n - 10) / 81;
}
// 注意:n 較大時 p10 溢出 long long (n>18),需用大整數或模運算
支持任意數字 d (1-9) 和項數 n:
輸入 2 4 → 2+22+222+2222 = 2468
輸入 3 5 → 3+33+333+3333+33333 = 37035
sum=0, term=0;s=a 其中 a 未初始化是嚴重錯誤。long long 溢出,需用字符串/大整數庫。scanf("%d %d", &d, &n) 用空格分隔,比逗號更魯棒。