题解
【入门】八进制转十进制
1 条题解
-
0
解题思路
题目要求把八进制数转换成十进制数。八进制数最长 20 位,所以要按位乘 8 的幂次来算。
方法:按位展开。
八进制转十进制,就是把每一位的数字乘以对应的 8 的幂次再相加:
八进制的个位 × 8⁰,十位 × 8¹,百位 × 8²……
步骤:
- 用 t 记录当前位的权重,从 1(8⁰)开始
- 从最低位(字符串末尾)往最高位扫:
- 这一位数字 × t,累加到结果 r
- t 乘 8,变成下一位的权重
- 输出 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