1 条题解

  • 0
    @ 2026-4-12 9:17:51

    八进制转二进制(100位超大数)

    这道题的核心规则:八进制1位 = 二进制3位,直接逐位转换即可,100位大数用字符串处理。

    C++ 实现代码

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
        // 八进制每一位对应的3位二进制表
        string oct2bin[] = {
            "000", "001", "010", "011",
            "100", "101", "110", "111"
        };
        
        string oct;
        cin >> oct;
        string bin;  // 存储最终二进制结果
        
        // 遍历每一位八进制数,转成3位二进制
        for (int i = 0; i < oct.size(); ++i) {
            int num = oct[i] - '0';
            bin += oct2bin[num];
        }
        
        // 去掉前导0(至少保留1位)
        int pos = 0;
        while (pos < bin.size() && bin[pos] == '0') {
            pos++;
        }
        if (pos == bin.size()) {
            // 全0的情况,输出0
            cout << "0" << endl;
        } else {
            cout << bin.substr(pos) << endl;
        }
        
        return 0;
    }
    

    核心原理

    1. 固定转换规则
      • 0 → 000
      • 1 → 001
      • 2 → 010
      • 3 → 011
      • 4 → 100
      • 5 → 101
      • 6 → 110
      • 7 → 111
    2. 处理流程
      • 读取字符串形式的八进制数
      • 逐位替换为3位二进制
      • 去掉前导0后输出
    3. 大数支持 全程用字符串处理,完美支持100位超长数据。

    测试示例

    输入:

    12376532347173217361
    

    输出:

    1010011111110101011010011100111001111011010001111011110001
    

    总结

    1. 八进制转二进制:1位八进制 = 固定3位二进制
    2. 100位大数必须用字符串处理
    3. 最后去掉前导0,保证输出格式正确
    • 1

    信息

    ID
    835
    时间
    1000ms
    内存
    16MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者