题目:
Description
根据栈的特点,实现十进制到其他进制之间的转换,具体要求如下:
(1)利用栈进行十进制数与N进制(如二进制、八进制、十六进制)数据之间的转换;
(2)通过顺序栈记录进制转换的中间结果,该顺序栈有一个指示栈顶的变量top,实现栈的判空、判满、入栈、出栈、进制转换等操作;
(3)顺序栈类定义的参考代码如下:
const int MaxStackSize=10; //栈最大容量(根据问题修改该值)
class SeqStack {
DataType StackList[MaxStackSize];
int top; //指示栈顶的变量
public:
SeqStack( ); //构造函数
bool IsEmpty( ); //判断栈空
bool IsFull( ) ; //判断栈满
void Push(const DataType x); //入栈
DataType Pop( ); //出栈
void Clear( ) ; //置栈空
void Conversion(int M, int N); //进制转换,并输出结果
}; //SeqStack
Input
该题目有多组测试数据,每组测试数据占一行。例如:M N,其中M(1≤M≤10000)是待转换的十进制数,N(2≤N≤9)表示某种进制。当输入-1 -1时结束。
Output
输出对应进制的数值,每条数据占一行
题解:
#include<iostream>
#include<cstring>
using namespace std;
const int MaxStackSize=32; //栈最大容量
class SeqStack {
int StackList[MaxStackSize];
int top; //指示栈顶的变量
public:
SeqStack( ) //构造函数
{
top=-1;
}
bool IsEmpty( ) //判断栈空
{
return top == -1;
}
bool IsFull( ) //判断栈满
{
return top == MaxStackSize - 1;
}
void Push(const int x) //入栈
{
StackList[++top]=x;
}
int Pop( ) //出栈
{
return StackList[top--];
}
void Clear( ) //置栈空
{
top = -1;
}
void Conversion(int M, int N) //进制转换,并输出结果
{
Clear();
do{
Push(M%N);
M /= N;
}while(M);
while(!IsEmpty()){
cout<<Pop();
}
cout<<"\n";
return;
}
}; //SeqStack
int main(){
SeqStack s;
int m,n;
while(cin>>m>>n)
{
if(m==-1&&n==-1)
break;
s.Conversion(m,n);
}
return 0;
}