T609719 十进制转八进制
题目概述
这道题目要求我们将给定的十进制正整数转换为八进制表示形式。八进制在计算机科学中也有一定应用,特别是在一些早期的系统中。理解进制转换的原理对于掌握计算机底层知识非常重要。
解题思路
十进制转八进制的方法与转二进制类似,都是通过"除基取余法",具体步骤如下:
-
将十进制数不断除以8,记录每次的余数(0-7)
-
将得到的余数按逆序排列,就是对应的八进制表示
-
使用栈数据结构可以很自然地实现这种"后进先出"的需求
参考代码
#include<bits/stdc++.h> using namespace std; int q[105], top; // 定义一个数组q作为栈,top表示栈顶指针 int main() { int n; cin >> n; // 输入十进制数n // 将十进制数转换为八进制数的过程 while(n != 0) { q[++top] = n % 8; // 取n除以8的余数压入栈中 n /= 8; // n更新为除以8的商 } // 输出八进制结果 while(top != 0) { cout << q[top--]; // 从栈顶开始依次弹出元素,实现逆序输出 } return 0; }
代码解析
-
栈的实现:与二进制转换类似,使用数组
q和栈顶指针top模拟栈结构。q[++top] = n%8实现压栈,q[top--]实现弹栈。 -
转换过程:
-
通过循环不断将十进制数n除以8,并将余数压入栈中
-
当n变为0时,转换过程结束
-
-
输出过程:
-
按照栈的后进先出特性,依次弹出元素并输出
-
这样自然实现了余数的逆序排列,得到正确的八进制表示
-
复杂度分析
-
时间复杂度:O(log₈n),因为每次循环n都至少减为原来的1/8
-
空间复杂度:O(log₈n),栈中存储的八进制位数与n的八进制位数相同
示例验证
以题目中的样例为例:
样例1:n=100
-
100 ÷ 8 = 12 余 4 → 栈:[4]
-
12 ÷ 8 = 1 余 4 → 栈:[4,4]
-
1 ÷ 8 = 0 余 1 → 栈:[4,4,1]
-
弹出顺序:1,4,4 → 输出144
样例2:n=512
-
512 ÷ 8 = 64 余 0 → 栈:[0]
-
64 ÷ 8 = 8 余 0 → 栈:[0,0]
-
8 ÷ 8 = 1 余 0 → 栈:[0,0,0]
-
1 ÷ 8 = 0 余 1 → 栈:[0,0,0,1]
-
弹出顺序:1,0,0,0 → 输出1000

浙公网安备 33010602011771号