题目:
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
输出对应进制的数值,每条数据占一行。
Sample Input
1 9 9999 7 7 2 10000 2 156 8 15 5 10000 9 1234 6 780 4 6143 3 -1 -1
Sample Output
1 41103 111 10011100010000 234 30 14641 5414 30030 22102112
题解:
#include<iostream>
using namespace std;
const int MaxStackSize = 15;
class SeqStack
{
int StackList[MaxStackSize];
int top;
public:
SeqStack();
bool isEmpty();
bool isFull();
void Push(const int x);
int Pop();
void Clear();
void Conversion(int m,int n);
};
SeqStack::SeqStack()
{
top = -1;
}
bool SeqStack::isEmpty()
{
if(top==-1)
return 1;
else
return 0;
}
bool SeqStack::isFull()
{
if(top==MaxStackSize)
return 1;
else
return 0;
}
void SeqStack::Push(const int x)
{
StackList[++top]=x;
}
int SeqStack::Pop()
{
if(!isEmpty())
{
return StackList[top--];
}
}
void SeqStack::Clear()
{
top=-1;
}
void SeqStack::Conversion(int m,int n)
{
while(m!=0)
{
Push(m % n);
m=m/n;
}
}
int main()
{
int m,n;
SeqStack seqstack;
while(cin>>m>>n)
{
if(m==-1 && n==-1)
break;
seqstack.Conversion(m,n);
while(!seqstack.isEmpty())
{
cout<<seqstack.Pop();
}
seqstack.Clear();
cout<<endl;
}
}