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号
浙公网安备 33010602011771号