輸入一個非負整數(可能超出 int 範圍),計算其十進制各位數字之和。
輸入範例: 2147483646
輸出範例: 45
#include <stdio.h>
#include <string.h>
int main() {
char s[100];
scanf("%99s", s); // 防止緩衝區溢出
int sum = 0;
for (int i = 0; s[i]; i++) {
if (s[i] >= '0' && s[i] <= '9')
sum += s[i] - '0'; // ASCII 轉數值
}
printf("%d\n", sum);
return 0;
}
優點: 無長度限制(受緩衝區大小約束),處理超大整數輕鬆。
關鍵點: '0' == 48,字符減 '0' 得數值,比硬編碼 -48 可讀性更強。
#include <stdio.h>
int main() {
unsigned long long n; // 支持 64 位
scanf("%llu", &n);
int sum = 0, digits = 0;
while (n) {
sum += n % 10;
n /= 10;
digits++;
}
printf("位數:%d,各位和:%d\n", digits, sum);
return 0;
}
優點: O(log₁₀ n) 時間,O(1) 空間,無字符串開銷。
注意: 輸入 0 時循環不執行,需單獨處理。
若需統計區間 [L, R] 內所有數的各位和,可用數位 DP,狀態 dp[pos][sum][tight],此處不展開。
「各位數字之和」是考察基本輸出、循環、數學運算或字符串處理的經典入門題。字符串法適合超長整數與快速編碼;數學法效率更高、內存更省。實際工程中視數據範圍選擇,並注意邊界情況(0、負數、非數字字符)。