top1编程
← 返回题目
题解

二进制整数转十进制

1 条题解

  • 0
    @ 2026-8-5 1:08:04

    解题思路

    小朋友,二进制其实一点都不难懂!

    我们平时用的数字叫十进制,数到10就进一位。而二进制只有两个数字 0 和 1,数到 2 就进一位。

    怎么把二进制变成十进制呢?有一个非常简单的口诀:

    每次读一位,结果先乘2,再加上这一位。

    我们拿 1001 来试试:

    1. 一开始结果 = 0
    2. 读到第1位 1:结果 = 0 × 2 + 1 = 1
    3. 读到第2位 0:结果 = 1 × 2 + 0 = 2
    4. 读到第3位 0:结果 = 2 × 2 + 0 = 4
    5. 读到第4位 1:结果 = 4 × 2 + 1 = 9

    答案是 9,是不是和样例一模一样!

    为什么要"乘2"呢?因为二进制是"满2进一",每一位都代表左边一位的 2 倍。就像十进制里"满10进一",新的数字往左边加一位,其实等于原来的数乘 10 再加这一位。二进制就是把 10 换成了 2 而已。

    参考代码

    // P4470 二进制整数转十进制:从高位到低位,ans = ans*2 + 当前位
    #include <iostream>
    using namespace std;
    int main() {
        char c;        // 每次读一个二进制数字符
        int ans = 0;   // 存转换结果,一开始是0
        // 逐个读入二进制数字(cin 会自动跳过空格和换行)
        while (cin >> c) {
            ans = ans * 2 + (c - '0');  // 结果乘2,再加上这一位
            // c - '0' 可以把字符'0'/'1'变成数字0/1
        }
        cout << ans << endl;  // 输出转换好的十进制数
        return 0;
    }
    

    复杂度分析

    • 时间:二进制数有几位,循环就执行几次,所以是 O(位数),最多25位,飞快!
    • 空间:只用了一个变量存结果,是 O(1),几乎不占内存。
    • 1