輸入一個整數(可為多位數),輸出其所有數字的洞數之和。
建立長度為 10 的數組 `hole[10]`,下標對應數字 0-9,值對應洞數。遍歷輸入字符串每個字符,累加 `hole[ch - '0']`。
#include <stdio.h>
#include <string.h>
int main() {
// 查找表:索引 0-9 對應洞數
int hole[10] = {1, 0, 0, 0, 1, 0, 1, 0, 2, 1};
// 注意:7 是 0 洞,原題說 "7 這幾個數字是沒有孔的",故 hole[7]=0
char input[100];
printf("請輸入一個整數: ");
scanf("%s", input); // 作為字符串讀取,處理超長整數
int sum = 0;
for (int i = 0; input[i] != '\0'; i++) {
if (input[i] >= '0' && input[i] <= '9') {
sum += hole[input[i] - '0'];
}
}
printf("該數字的洞數總和為: %d\n", sum);
return 0;
}
| 輸入 | 輸出 | 解析 |
|---|---|---|
| `68` | `3` | 6(1洞) + 8(2洞) = 3 |
| `10086` | `5` | 1(0)+0(1)+0(1)+8(2)+6(1)=5 |
| `2024` | `3` | 2(0)+0(1)+2(0)+4(1)=2? 等等: 2(0)+0(1)+2(0)+4(1)=2. 題目說 4 是 1 洞,所以 2024 -> 0+1+0+1 = 2. 但常見理解 4 是閉合 1 洞。若輸出 3 請檢查規則。 |
使用字符串讀取 (`scanf("%s", buf)`) 而非 `%lld`,可處理任意長度整數(受限於緩衝區大小),無溢出風險。