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

C語言十進制轉二進制:遞迴與迭代兩種經典實現

     編輯:關於C語言

問題描述

將非負整數十進制數轉換為二進制表示。例如輸入 13 輸出 1101。本文介紹遞迴法與迭代法兩種核心算法。

方法一:遞迴分治法

核心邏輯

二進制轉換本質是「除 2 取餘,逆序排列」。遞迴自然契合此過程:

void dectobin(int n) {
    if (n / 2 > 0) {
        dectobin(n / 2); // 先處理高位
    }
    printf("%d", n % 2); // 輸出當前位
}

執行流程以 13 為例

  1. dectobin(13) → 13/2=6>0 → 調用 dectobin(6)
  2. dectobin(6) → 6/2=3>0 → 調用 dectobin(3)
  3. dectobin(3) → 3/2=1>0 → 調用 dectobin(1)
  4. dectobin(1) → 1/2=0 不遞迴 → 輸出 1
  5. 返回上層依次輸出:1(3%2)、0(6%2)、1(13%2) → 1101

方法二:迭代陣列法

核心邏輯

用陣列暫存餘數,最後逆序輸出:

int main() {
    int i, x;
    int a[1000]; // 足夠大,32位整數最多32位二進制
    scanf("%d", &x);
    for (i = 0; ; i++) {
        a[i] = x % 2;
        x /= 2;
        if (x == 0) break;
    }
    for (; i >= 0; i--) {
        printf("%d", a[i]);
    }
    printf("\n");
    return 0;
}

兩種方法對比

維度遞迴法迭代法
代碼簡潔度極高,無需額外變數需陣列暫存
空間複雜度O(log n) 棧幀O(log n) 陣列
可讀性符合數學定義直觀過程導向易懂
適用場景教學、位數較少嵌入式、避免棧溢出

進階優化:位運算版

利用位運算更高效,無除法開銷:

void dectobin_bitwise(unsigned int n) {
    if (n == 0) { printf("0"); return; }
    // 找到最高位
    int bits = 0;
    for (int temp = n; temp > 0; temp >>= 1) bits++;
    // 從高位到低位輸出
    for (int i = bits - 1; i >= 0; i--) {
        printf("%d", (n >> i) & 1);
    }
}

常見坑點提醒

  • 輸入 0 特判:遞迴基例需處理 n==0 直接輸出 0,否則無輸出。
  • 負數處理:本文僅處理非負整數,負數涉及補碼表示,需另行設計。
  • 陣列大小:32 位 int 最大 32 位二進制,int a[64] 足夠安全。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved