1. 八进制转十进制算法详解
1.1 进制转换基础原理
八进制(Octal)是一种以8为基数的计数系统,使用数字0-7表示数值。而十进制(Decimal)是我们日常使用的以10为基数的计数系统。将八进制数转换为十进制数的核心思想是:将八进制数的每一位数字乘以8的相应次幂,然后将所有乘积相加。
举个例子,八进制数237转换为十进制的过程是:
2×8² + 3×8¹ + 7×8⁰ = 2×64 + 3×8 + 7×1 = 128 + 24 + 7 = 159
1.2 算法实现步骤解析
让我们仔细分析提供的C++代码实现:
cpp复制#include<bits/stdc++.h>
using namespace std;
int main(){
int in;
cin >> in; // 输入八进制数
int out = 0; // 存储十进制结果
int base = 1; // 初始权重为8^0=1
while(in > 0){
int last = in%10; // 获取最后一位数字
out += last*base; // 累加当前位的值
in /= 10; // 去掉最后一位
base *= 8; // 权重增加8倍
}
cout << out << endl;
return 0;
}
这个算法的工作流程如下:
- 从用户输入获取一个整数(虽然是八进制数,但C++会以十进制形式读取)
- 初始化输出结果为0,权重基数为1
- 使用循环不断取出输入数的最后一位
- 将该位数字乘以当前权重并累加到结果中
- 去掉已处理的最后一位,权重乘以8(因为每一位向左移动一位,权重增加8倍)
- 重复直到输入数变为0
1.3 算法复杂度与优化
这个算法的时间复杂度是O(n),其中n是输入数字的位数。因为我们需要处理每一位数字一次。空间复杂度是O(1),只使用了固定数量的变量。
注意:这段代码假设输入的数字确实是合法的八进制数(只包含0-7的数字)。实际应用中应该添加输入验证。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
