题目

从标准输入读入一个非负十进制整数,将其转换为二进制字符串形式并在控制台输出。

输入格式:一行输入一个非负整数 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