1 条题解
-
0
八进制转十进制(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; }代码核心原理
- 输入处理 20位的八进制数远超普通整数范围,所以用字符串读取。
- 逐位转换公式
从左到右遍历每一位:
结果 = 结果 * 8 + 当前位数字这是进制转换的标准计算方式。 - 数据类型
使用
unsigned long long(64位无符号整数),完全可以容纳20位八进制数的最大值。
测试示例
输入:
77777777777777777777输出:
1152921504606846975总结
- 超长数字必须用字符串输入
- 进制转换核心公式:
dec = dec * 进制 + 当前位数字 - 20位八进制数用
unsigned long long刚好可以存储
- 1
信息
- ID
- 738
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 10
- 标签
- 递交数
- 5
- 已通过
- 5
- 上传者
粤公网安备44195502000195号