任务描述
本关任务:基于栈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个元素,并逆序输出。
// stack::push/pop
#include <iostream>
#include <stack>
using namespace std;
int main ()
{
stack<int> mystack; //声明元素类型为int类型的栈
for (int i=0; i<5; ++i)
mystack.push(i); //压栈
cout << "Popping out elements...";
while (!mystack.empty()) //判断栈是否为空
{
cout << " " << mystack.top(); //读栈顶元素
mystack.pop(); //弹栈
}
cout << endl;
return 0;
}
为了完成本关任务,你需要掌握: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 **********/ }