分数 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); } }