本題要求實現一個函數,將正整數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;
}