top1编程
← 返回题目
题解

【基础】八进制转换二进制

1 条题解

  • 0
    @ 2026-7-31 16:14:37

    解题思路

    题目要求把八进制数转换成二进制数。八进制最长 100 位,不能用整数算,要利用规律。

    核心规律:八进制的 1 位,正好对应二进制的 3 位。

    因为 8 = 2³,所以每个八进制数字都能直接查表转成 3 位二进制。

    步骤:

    1. 准备一个表,存 0~7 对应的 3 位二进制
    2. 把八进制数的每一位转成 3 位二进制,依次拼起来
    3. 去掉前导 0(如果全是 0 就输出一个 0)

    举例:八进制 7 对应的 3 位二进制是 111,八进制 0 对应 000。所以八进制 777 转成二进制就是 111111。

    为什么不用先转十进制? 八进制太长时十进制会超过 long long 的范围,溢出出错。直接一位转 3 位最安全。

    参考代码

    #include <iostream>
    #include <string>
    #include <cctype>
    using namespace std;
    
    int main() {
        string t[8] = {"000","001","010","011","100","101","110","111"};
        string r, s;
        cin >> s;
    
        for (int i = 0; i < s.size(); i++) {
            int x = s[i] - '0';
            r += t[x];  // 每位八进制转 3 位二进制
        }
    
        while (r[0] == '0') r.erase(0, 1);  // 去前导 0
    
        if (r == "") cout << 0;
        else cout << r;
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(N),N 为八进制位数
    • 空间复杂度:O(N),存二进制字符串
    • 1