void print_digits_array(int num) {
int arr[10], idx = 0;
if (num == 0) { putchar('0'); return; }
while (num) {
arr[idx++] = num % 10; // 取個位
num /= 10;
}
for (int i = idx-1; i >= 0; i--) // 逆序輸出
printf("%d ", arr[i]);
}
void print_digits_rec(int num) {
if (num >= 10) print_digits_rec(num / 10);
printf("%d ", num % 10);
}
遞迴先處理高位,返回時列印低位,自然實現正序輸出。注意:負數需預處理。
void print_digits_math(int num) {
if (num == 0) { putchar('0'); return; }
int div = 1;
while (num / div >= 10) div *= 10; // 找最高位權重
while (div) {
printf("%d ", num / div);
num %= div;
div /= 10;
}
}
#includevoid method1(int n) { /* 陣列法 */ } void method2(int n) { /* 遞迴法 */ } void method3(int n) { /* 數學法 */ } int main() { int num; printf("Enter integer: "); scanf("%d", &num); printf("Method1: "); method1(num); puts(""); printf("Method2: "); method2(num); puts(""); printf("Method3: "); method3(num); puts(""); return 0; }
| 方法 | 空間 | 時間 | 優點 | 缺點 |
|---|---|---|---|---|
| 陣列+逆序 | O(log n) | O(log n) | 直觀、易修改輸出格式 | 需額外陣列 |
| 遞迴 | O(log n) 堆疊 | O(log n) | 程式碼最短、邏輯清晰 | 堆疊溢位風險(極大數) |
| 數學權重法 | O(1) | O(log n) | 無額外空間、無遞迴 | 需計算最高位權重 |
輸出整數每一位是基礎指標/算術練習。**遞迴法最適合教學展示**,**數學法最適合嵌入式/受限環境**,**陣列法適合需後續處理位數陣列的場景**。