top1编程
← 返回题目
题解

【入门】二进制转换十进制

1 条题解

  • 0
    @ 2026-7-31 12:19:28

    解题思路

    题目要求把二进制数转换成十进制数。二进制最长 25 位,结果在 int 范围内。

    方法:按位展开。

    二进制转十进制,就是把每一位乘以对应的 2 的幂次再相加:

    个位 × 2⁰,十位 × 2¹,百位 × 2²……

    步骤:

    1. 用 x 记录当前位的权重,从 1(2⁰)开始
    2. 从最低位(字符串末尾)往最高位扫:
      • 这一位 × x,累加到结果 r
      • x 乘 2,变成下一位的权重
    3. 输出 r

    举例 二进制 1101:

    • 个位 1×1=1
    • 十位 0×2=0
    • 百位 1×4=4
    • 千位 1×8=8
    • 总和 = 1+0+4+8 = 13

    参考代码

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
        int x = 1, r = 0;
        string s;
        cin >> s;
    
        for (int i = s.size() - 1; i >= 0; i--) {
            r += (s[i] - '0') * x;  // 这一位 × 权重
            x = x * 2;              // 权重翻 2 倍
        }
    
        cout << r;
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(N),N 为位数
    • 空间复杂度:O(1)
    • 1