任务描述
本关任务:基于栈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个元素,并逆序输出。
<span class="com">// stack::push/pop</span>
<span class="com">#include<span class="pln"><span class="str"><iostream></span></span></span>
<span class="com">#include<span class="pln"><span class="str"><stack></span></span></span>
<span class="kwd">using<span class="pln"><span class="kwd">namespace<span class="pln">std<span class="pun">;</span></span></span></span></span>
<span class="typ">int<span class="pln">main<span class="pun">()</span></span></span>
<span class="pun">{</span>
<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>
<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>
<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>
<span class="pln">cout<span class="pun"><<<span class="pln"><span class="str">"Popping out elements..."<span class="pun">;</span></span></span></span></span>
<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>
<span class="pln"><span class="pun">{</span></span>
<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>
<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>
<span class="pln"><span class="pun">}</span></span>
<span class="pln">cout<span class="pun"><<<span class="pln">endl<span class="pun">;</span></span></span></span>
<span class="pln"><span class="kwd">return<span class="pln"><span class="lit">0<span class="pun">;</span></span></span></span></span>
<span class="pun">}</span>
为了完成本关任务,你需要掌握:1.如何创建一个栈,2.入栈、出栈操作,3.进制转换。
进制转换
除K取余法,例如十进制数10
转二进制: 上图可得:K=2,1010=10102即:10=1×23+0×22+1×21+0×20
编程要求
本关的编程任务是补全右侧代码片段Decimal_Conversion_Octal
中Begin
至End
中间的代码,具体要求如下:
- 在
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
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!