C語言實現十進制轉換爲二進制

/* * 文件名:二進制轉換.c * 功能描述:把10進制數轉換爲二進制數 * 編寫人:王廷雲 * 編寫日期:2017-1-10 */
#include <stdio.h>

#define NR (sizeof(int)*8) // 二進制位的個數

void deciToBin(int num);	 // 十進制轉換爲二進制函數聲明

/* 主函數 */
int main(void)
{
    int num;

    fprintf(stdout, "請輸入一個正整數:");

    /* 獲取並檢查用戶輸入 */
    while (1)
    {
        if (fscanf(stdin, "%d", &num) != 1)
        {
            fprintf(stderr, "輸入錯誤!請從新輸入:");
            while (getchar() != '\n'); // 去掉多餘的非法字符 
            continue;
        }
        else if (num < 0)             // 輸入的數不能爲負數
        {
            fprintf(stderr, "請輸入錯誤!請輸入正整數:");
            continue;
        }
        else
            break;
    }

    fprintf(stdout, "對應二進制爲:");

#if 1 /* 方法一: 不使用遞歸 */
    char bitArr[NR];
    int i = -1;

    /* 算法:棧的數學模型 */
    do {
        i += 1;
        bitArr[i] = num % 2;
        num /= 2;
    } while (num != 0);

    /* 逆序打印 */
    for (i ; i >= 0; i--)
    {
        fprintf(stdout, "%d", bitArr[i]);
    }
    fputc('\n', stdout);

#else /* 方法二: 使用遞歸 */
    if (num == 0)
    {
        fprintf(stdout, "0\n");
    }
    else
    {
        deciToBin(num);       // 調用第歸函數
        fputc('\n', stdout);
    }
#endif 
    
    return 0;
}

/* * @函數名:deciToBin * @函數功能:實現十進制轉換爲二進制 * @參數:須要轉換的十進制整數 */
void deciToBin(int num)
{
    /* 第歸結束條件 */
    if (num == 0)
    {
        return;
    }

    /* 第歸調用 */
    deciToBin(num/2);

    /* 逆序打印 */
    fprintf(stdout, "%d", num%2);
}