利用栈实现整数的十进制转八进制

任务描述

本关任务:基于栈stack数据结构解决整数十进制转八进制的问题。

相关知识

栈是基础的数据结构,元素操作遵循后进先出的原理。本关卡基于数组存储实现了栈的基本操作。

C++ STL中提供了栈结构的实现 1、c++ stl栈stack的头文件为:#include <stack> 2、c++ stl栈stack的成员函数介绍 top():返回一个栈顶元素的引用,类型为 T&。如果栈为空,返回值未定义。 push(const T& obj):可以将对象副本压入栈顶。 push(T&& obj):以移动对象的方式将对象压入栈顶。 pop():弹出栈顶元素。 size():返回栈中元素的个数。 empty():在栈中没有元素的情况下返回 true。 emplace():用传入的参数调用构造函数,在栈顶生成对象。 swap(stack<T> & other_stack):将当前栈中的元素和参数中的元素交换。参数所包含元素的类型必须和当前栈的相同。 , 例:以下代码实现了,输入5个元素,并逆序输出。

  1. <span class="com">// stack::push/pop</span>
  2. <span class="com">#include<span class="pln"><span class="str"><iostream></span></span></span>
  3. <span class="com">#include<span class="pln"><span class="str"><stack></span></span></span>
  4. <span class="kwd">using<span class="pln"><span class="kwd">namespace<span class="pln">std<span class="pun">;</span></span></span></span></span>
  5. <span class="typ">int<span class="pln">main<span class="pun">()</span></span></span>
  6. <span class="pun">{</span>
  7. <span class="pln"><span class="typ">stack<span class="str"><int><span class="pln">mystack<span class="pun">;<span class="pln"><span class="com">//声明元素类型为int类型的栈</span></span></span></span></span></span></span>
  8. <span class="pln"><span class="kwd">for<span class="pln"><span class="pun">(<span class="typ">int<span class="pln">i<span class="pun">=<span class="lit">0<span class="pun">;<span class="pln">i<span class="pun"><<span class="lit">5<span class="pun">;<span class="pln"><span class="pun">++<span class="pln">i<span class="pun">)</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
  9. <span class="pln">mystack<span class="pun">.<span class="pln">push<span class="pun">(<span class="pln">i<span class="pun">);<span class="pln"><span class="com">//压栈</span></span></span></span></span></span></span></span>
  10. <span class="pln">cout<span class="pun"><<<span class="pln"><span class="str">"Popping out elements..."<span class="pun">;</span></span></span></span></span>
  11. <span class="pln"><span class="kwd">while<span class="pln"><span class="pun">(!<span class="pln">mystack<span class="pun">.<span class="pln">empty<span class="pun">())<span class="pln"><span class="com">//判断栈是否为空</span></span></span></span></span></span></span></span></span></span>
  12. <span class="pln"><span class="pun">{</span></span>
  13. <span class="pln">cout<span class="pun"><<<span class="pln"><span class="str">" "<span class="pln"><span class="pun"><<<span class="pln">mystack<span class="pun">.<span class="pln">top<span class="pun">();<span class="pln"><span class="com">//读栈顶元素</span></span></span></span></span></span></span></span></span></span></span></span>
  14. <span class="pln">mystack<span class="pun">.<span class="pln">pop<span class="pun">();<span class="pln"><span class="com">//弹栈</span></span></span></span></span></span>
  15. <span class="pln"><span class="pun">}</span></span>
  16. <span class="pln">cout<span class="pun"><<<span class="pln">endl<span class="pun">;</span></span></span></span>
  17. <span class="pln"><span class="kwd">return<span class="pln"><span class="lit">0<span class="pun">;</span></span></span></span></span>
  18. <span class="pun">}</span>

为了完成本关任务,你需要掌握:1.如何创建一个栈,2.入栈、出栈操作,3.进制转换。

进制转换

K取余法,例如十进制数10转二进制: 利用栈实现整数的十进制转八进制 上图可得:K=2,1010=10102即:10=1×23+0×22+1×21+0×20

编程要求

本关的编程任务是补全右侧代码片段Decimal_Conversion_OctalBeginEnd中间的代码,具体要求如下:

  • Decimal_Conversion_Octal中,利用栈stack的基本操作实现整数的十进制转八进制,并输出八进制结果,末尾换行。

输入输出说明

输入十进制数n(n为绝对值不超过10000的整数),输出n对应的八进制数。

样例一: 测试输入:71 预期输出:107

样例二: 测试输入:8 预期输出:10

//输入10进制数,转换为8进制数输出
#include <iostream>
#include<stack>
using namespace std;

int main() { 

    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    int num;
    while(~scanf("%d",&num)){
        if(num==0)cout<<'0'<<endl;
        stack<int>v;
        while(num){
            v.push(num%8);
            num/=8;
        }
        while(!v.empty()){
            cout<<v.top();
            v.pop();
        }
    }
    /********** End **********/
}

原文链接: https://www.cnblogs.com/xxxsans/p/13917608.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/204728

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午9:58
下一篇 2023年2月12日 下午9:58

相关推荐