需求:輸入整數,逐位輸出 (如 72356 → 7 2 3 5 6),支援負數。
char s[20];
scanf("%s", s);
for (int i=0; s[i]; i++) printf("%c\n", s[i]);
int len = (s[0]=='-') ? strlen(s)-1 : strlen(s);
printf("位數:%d\n", len);
int n; scanf("%d", &n);
while (n) { printf("%d ", n%10); n/=10; }
// 輸出個位→十位→百位... 需存入陣列再逆序打印才得正序
void print_digits(int n) {
if (n > 9) print_digits(n/10);
printf("%d ", n%10);
}
// 主調用:print_digits(abs(n)) (負數先取絕對值)
| 方法 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| 字符串 | 代碼極短、天然支援負號、無數學運算 | 輸入超長可能溢出緩衝區 | 快速原型、非數值處理 |
| 取模 | 無遞歸棧開銷、直觀 | 輸出逆序、需額外空間正序 | 嵌入式無庫環境 |
| 遞歸 | 正序輸出、代碼極簡 | 棧深度受限 (log10(n))、負數需預處理 | 教學演示、位數較少 |