分数 10
作者 C课程组
单位 浙江大学
本题要求实现一个函数,将非负整数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
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
十进制数转二进制数的基本方法:
- 除以2:将给定的十进制数除以2。
- 记录余数:将每次除法的余数(0或1)记录下来。
- 使用商继续除以2:用上次除法的商(整数部分)再次除以2,并重复步骤2。
- 重复步骤:继续这个过程,直到商为0。
- 逆序排列余数:将记录的余数从下到上排列(即逆序),得到的序列就是该十进制数的二进制表示。
以下是一个具体的例子,将十进制数23转换为二进制数:
- 23 ÷ 2 = 11 ... 1 (商是11,余数是1)
- 11 ÷ 2 = 5 ... 1 (商是5,余数是1)
- 5 ÷ 2 = 2 ... 1 (商是2,余数是1)
- 2 ÷ 2 = 1 ... 0 (商是1,余数是0)
- 1 ÷ 2 = 0 ... 1 (商是0,余数是1)
现在,将记录的余数从下到上排列:11011。所以,十进制数23的二进制表示是11011。
C程序如下:
void dectobin(int n) {
// 如果n为0,直接打印0(这是递归的基准情况)
if(n == 0){
printf("%d",n);
}
// 如果n为1,直接打印1(这也是一个基准情况)
else if(n == 1){
printf("%d",n);
}
// 对于其他情况,递归处理n/2(即n的高位部分),然后打印n%2(即n的低位部分)
else{
// 递归调用,先处理n的高位部分
dectobin(n / 2);
// 打印n的低位部分
printf("%d",n % 2);
}
}