輸入一個整數(可正可負),逐位輸出其十進位數字,並統計位數(不計負號)。
#include <stdio.h>
#include <string.h>
int main() {
char num[100];
printf("請輸入一個整數:");
scanf("%99s", num); // 讀為字串,無大小限制
int len = strlen(num);
int start = (num[0] == '-') ? 1 : 0; // 跳過負號
for (int i = start; i < len; i++)
printf("%c\n", num[i]);
printf("位數為:%d\n", len - start);
return 0;
}
優點:無整數範圍限制、程式碼簡潔、天然處理負號。缺點:非數學運算視角。
#include <stdio.h>
int main() {
int num;
printf("請輸入一個非負整數:");
scanf("%d", &num);
if (num == 0) { printf("0\n位數為:1\n"); return 0; }
int count = 0;
while (num > 0) {
printf("%d\t", num % 10); // 取個位
num /= 10; // 去個位
count++;
}
printf("\n位數為:%d\n", count);
return 0;
}
輸出順序為個位→十位→百位(逆序)。若需正序,需先存入陣列再反向輸出。
#include <stdio.h>
void print_digits(int n) {
if (n > 9) print_digits(n / 10); // 先處理高位
printf("%d\t", n % 10); // 再輸出當前位
}
int main() {
int num;
printf("請輸入一個整數:");
scanf("%d", &num);
if (num < 0) { putchar('-'); num = -num; } // 處理負數
print_digits(num);
putchar('\n');
return 0;
}
遞迴利用呼叫堆疊自然實現「先高位後低位」。注意堆疊深度約 log10(n),對 32/64-bit int 完全安全。
| 維度 | 字串法 | 取模迴圈 | 遞迴 |
|---|---|---|---|
| 支援負數 | 原生 | 需額外處理 | 需額外處理 |
| 輸出順序 | 正序 | 逆序 | 正序 |
| 極大數(>64bit) | 支援 | 不支援 | 不支援 |
| 程式碼複雜度 | 低 | 低 | 極低 |
| 教學價值 | 字串操作 | 數學本質 | 遞迴思維 |