1 条题解

  • 0
    @ 2026-4-12 9:14:56

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

    这道题的核心方法:二进制转八进制,从右往左每3位分组,不足补0,每组直接转八进制

    因为二进制数最长100位,必须用字符串处理,不能用普通整数。

    C++ 实现代码

    #include <iostream>
    #include <string>
    #include <algorithm>  // 用于reverse翻转字符串
    using namespace std;
    
    int main() {
        string bin;
        cin >> bin;
        
        // 第一步:翻转二进制字符串,方便从右往左分组
        reverse(bin.begin(), bin.end());
        
        string oct;  // 存储八进制结果
        
        // 第二步:每3位一组处理
        for (int i = 0; i < bin.size(); i += 3) {
            int num = 0;  // 存储当前3位二进制对应的十进制值
            // 处理第1位(2^0)
            if (i < bin.size()) num += (bin[i] - '0') * 1;
            // 处理第2位(2^1)
            if (i+1 < bin.size()) num += (bin[i+1] - '0') * 2;
            // 处理第3位(2^2)
            if (i+2 < bin.size()) num += (bin[i+2] - '0') * 4;
            
            // 转为字符存入结果
            oct += (char)('0' + num);
        }
        
        // 第三步:翻转回来得到正确顺序
        reverse(oct.begin(), oct.end());
        
        // 输出结果
        cout << oct << endl;
        return 0;
    }
    

    核心原理

    1. 分组规则 八进制1位 = 二进制3位 从右往左每3位分一组,左边不足3位补0
    2. 计算方法 每组3位二进制:第1位×4 + 第2位×2 + 第3位×1,直接得到对应八进制数
    3. 处理大数 用字符串存储二进制数,完全支持100位超长数据

    测试示例

    输入:

    111100001111000011110000
    

    输出:

    74170360
    

    总结

    1. 二进制转八进制:从右每3位分组
    2. 100位大数必须用字符串处理
    3. 翻转字符串简化分组计算,代码简洁高效
    • 1

    信息

    ID
    739
    时间
    1000ms
    内存
    16MiB
    难度
    9
    标签
    递交数
    9
    已通过
    5
    上传者