top1编程
← 返回题目
题解

二进制整数转十进制

1 条题解

  • 0
    @ 2026-8-5 10:24:13

    解题思路

    二进制转十进制,可以用"逐位乘 2 累加"的办法,特别适合一边读一边算。

    我们从二进制数的最高位(最左边)开始,一位一位往右看,每次都做一件事:

    ans = ans × 2 + 当前这一位

    这句话的意思是:每看到一个新的一位,先把之前的结果放大一倍(相当于左移一位),再把这一位加上去。

    举个例子,把 1001 转成十进制:

    • 第 1 位是 1:ans = 0 × 2 + 1 = 1
    • 第 2 位是 0:ans = 1 × 2 + 0 = 2
    • 第 3 位是 0:ans = 2 × 2 + 0 = 4
    • 第 4 位是 1:ans = 4 × 2 + 1 = 9

    最后得到 9,正好就是二进制 1001 对应的十进制数。

    参考代码

    // P4516 二进制转十进制:按位累加换算
    #include <iostream>
    using namespace std;
    
    int main() {
        char s[30];
        cin >> s;
        int ans = 0;
        for (int i = 0; s[i]; i++) {
            ans = ans * 2 + (s[i] - '0'); // 每一位先乘以2再加当前位
        }
        cout << ans << endl;
        return 0;
    }
    

    复杂度分析

    只需要把二进制数从左到右扫一遍,二进制位数最多 25 位,所以时间复杂度是 O(位数),空间复杂度是 O(1)。

    • 1