1 条题解
-
0
二进制转八进制(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位 = 二进制3位 从右往左每3位分一组,左边不足3位补0
- 计算方法
每组3位二进制:
第1位×4 + 第2位×2 + 第3位×1,直接得到对应八进制数 - 处理大数 用字符串存储二进制数,完全支持100位超长数据
测试示例
输入:
111100001111000011110000输出:
74170360总结
- 二进制转八进制:从右每3位分组
- 100位大数必须用字符串处理
- 翻转字符串简化分组计算,代码简洁高效
- 1
信息
- ID
- 739
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 9
- 标签
- 递交数
- 9
- 已通过
- 5
- 上传者
粤公网安备44195502000195号