實驗10-9 十進制轉換二進制

本題要求實現一個函數,將正整數n轉換爲二進制後輸出。

函數接口定義:

void dectobin( int n );

函數dectobin應在一行中打印出二進制的n。建議用遞歸實現。

裁判測試程序樣例:

#include <stdio.h>

void dectobin( int n );

int main()
{
    int n;

    scanf("%d", &n);
    dectobin(n);

    return 0;
}

/* 你的代碼將被嵌在這裏 */

輸入樣例:

10

輸出樣例:

1010

算法思路:《C Primer Plus》第五版 p228

5:奇數的二進制形式最後一位一定是1,偶數-0。可以通過計算 5%2 得出 5 的二進制形式中最後一個數字是 1 或 0。對於數值 n,其二進制數的最後一位是 n%2,因此計算出的第一個數字恰是需要輸出的最後一個數字。這就需要使用遞歸函數實現。在函數中,首先在遞歸調用之前計算 n%2 的值,然後在遞歸調用語句之後輸出。這樣,計算出的第一個數值就會在最後一個輸出。

爲了得出下一個數字,需要將 原數值除以2。(相當於在十進制下把小數點左移一位)如果此時得出的數值是偶數,則下一個二進制位的數值是 0;奇數就是 1.

例如 5/2 的數值是 2,所以下一位值 是 0,這時已經得到了數值 01.重複上述計算,即使用 2除以2得出1,而 1%2的數值是1,因此下一位值是1。這時得到數值 101。

停止計算:只要被 2 除的結果 >= 2,就還需要一位二進制位進行表示,所以只有被 2 除的結果小於 2 才停止計算

 每次除以  2 就得出一位二進制位值,直到計算出最後一位爲止。

5 % 2 = 1  最後一位數字 是 1

5 / 2 = 2,  2 % 2 = 0 ,倒數第二位數字是 0

2 / 2 = 1, 1 % 2 = 1,倒數第三位數字是 1

#include <stdio.h>
void to_binary(unsigned long n);

int main(){
    unsigned long number;
    scanf_s("%ul", &number);
    to_binary(number);
    return 0;
}

void to_binary(unsigned long n){
    int r;
    r = n % 2; // 計算末位數字
    if(n >= 2) // 如果被2除的結果不小於2,就繼續遞歸
        to_binary(n/2); 
    putchar('0' + r);
    return;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章