《資料結構與演算法A》實驗2:棧的應用
阿新 • • 發佈:2018-12-11
題目:
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 -1Sample Output
1 41103 111 10011100010000 234 30 14641 5414 30030 22102112
題解:
#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; }