1 条题解

  • 0
    @ 2026-4-12 9:13:55

    八进制转十进制(20位大数处理)

    这道题的关键点:八进制数最长20位,普通的int/long long存不下,必须用字符串读取,然后逐位计算转换成十进制大数。

    C++ 实现代码

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
        // 用字符串存储超长八进制数
        string oct;
        cin >> oct;
        
        // 用 unsigned long long 存储结果(足够容纳20位八进制数)
        unsigned long long dec = 0;
        
        // 逐位转换:十进制 = 十进制*8 + 当前位数字
        for (int i = 0; i < oct.size(); ++i) {
            dec = dec * 8 + (oct[i] - '0');
        }
        
        // 输出十进制结果
        cout << dec << endl;
        return 0;
    }
    

    代码核心原理

    1. 输入处理 20位的八进制数远超普通整数范围,所以用字符串读取。
    2. 逐位转换公式 从左到右遍历每一位: 结果 = 结果 * 8 + 当前位数字 这是进制转换的标准计算方式。
    3. 数据类型 使用unsigned long long(64位无符号整数),完全可以容纳20位八进制数的最大值。

    测试示例

    输入:

    77777777777777777777
    

    输出:

    1152921504606846975
    

    总结

    1. 超长数字必须用字符串输入
    2. 进制转换核心公式:dec = dec * 进制 + 当前位数字
    3. 20位八进制数用unsigned long long刚好可以存储
    • 1

    信息

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