题解
【基础】八进制转换二进制
1 条题解
-
0
解题思路
题目要求把八进制数转换成二进制数。八进制最长 100 位,不能用整数算,要利用规律。
核心规律:八进制的 1 位,正好对应二进制的 3 位。
因为 8 = 2³,所以每个八进制数字都能直接查表转成 3 位二进制。
步骤:
- 准备一个表,存 0~7 对应的 3 位二进制
- 把八进制数的每一位转成 3 位二进制,依次拼起来
- 去掉前导 0(如果全是 0 就输出一个 0)
举例:八进制 7 对应的 3 位二进制是 111,八进制 0 对应 000。所以八进制 777 转成二进制就是 111111。
为什么不用先转十进制? 八进制太长时十进制会超过 long long 的范围,溢出出错。直接一位转 3 位最安全。
参考代码
#include <iostream> #include <string> #include <cctype> using namespace std; int main() { string t[8] = {"000","001","010","011","100","101","110","111"}; string r, s; cin >> s; for (int i = 0; i < s.size(); i++) { int x = s[i] - '0'; r += t[x]; // 每位八进制转 3 位二进制 } while (r[0] == '0') r.erase(0, 1); // 去前导 0 if (r == "") cout << 0; else cout << r; return 0; }复杂度分析
- 时间复杂度:O(N),N 为八进制位数
- 空间复杂度:O(N),存二进制字符串
- 1