本题要求实现一个函数,将正整数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;
}