1. 程式人生 > >《資料結構與演算法A》實驗2:棧的應用

《資料結構與演算法A》實驗2:棧的應用

題目:

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>
#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;
}