top1编程
← 返回题目
题解

【入门】八进制转十进制

1 条题解

  • 0
    @ 2026-7-31 11:58:08

    解题思路

    题目要求把八进制数转换成十进制数。八进制数最长 20 位,所以要按位乘 8 的幂次来算。

    方法:按位展开。

    八进制转十进制,就是把每一位的数字乘以对应的 8 的幂次再相加:

    八进制的个位 × 8⁰,十位 × 8¹,百位 × 8²……

    步骤:

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

    为什么要从低位开始? 因为最低位的权重是 8⁰=1,往左每进一位权重翻 8 倍。从低位开始,权重 t 正好从 1 开始递增。

    为什么要用 long long? 20 位八进制最大约 1.15×10^18,int 装不下,要用 64 位的 long long。

    参考代码

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

    复杂度分析

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