首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言三種方法輸出整數每一位:字串法、取模法、遞迴法

     編輯:關於C

題目

輸入一個整數(可正可負),逐位輸出其十進位數字,並統計位數(不計負號)。

方法一:字串處理法(最直觀、支援負數、極大數)

#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)支援不支援不支援
程式碼複雜度低低極低
教學價值字串操作數學本質遞迴思維

建議

  • 實際專案/大數處理:字串法或大數庫。
  • 演算法面試/教學:熟練三種寫法,理解各自遞迴/迴圈/字串的轉換關係。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved