题目
从标准输入读入一个非负十进制整数,将其转换为二进制字符串形式并在控制台输出。
输入格式:一行输入一个非负整数 n。
输出格式:输出对应的二进制字符序列,末尾换行。
数据范围与约定:0 ≤ n ≤ 2×109。
思路与算法
1. 除 2 取余逆序输出
反复执行 n % 2 取出当前二进制位存入字符数组,随后 n /= 2,循环直到 n 为 0。
2. 栈式反转与 0 的特判
因为最先得到的是低位(个位),输出时需要从高位到低位倒序打印。若输入本身为 0,需特判输出单个字符 0。
完整程序
#include <stdio.h>
int main(void)
{
unsigned n;
if (scanf("%u", &n) != 1) {
return 1;
}
if (n == 0) {
printf("0\n");
return 0;
}
char bits[33];
int len = 0;
// 不断取最低二进制位并右移(逆序存入数组)
while (n) {
bits[len++] = (char)('0' + (n & 1u));
n >>= 1;
}
// 倒序输出,恢复高位在前的正向二进制串
while (len--) {
putchar(bits[len]);
}
putchar('\n');
return 0;
}运行示例
输入:
13输出:
1101