程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 利用棧實現十進制數數制轉換成其他進制數

利用棧實現十進制數數制轉換成其他進制數

編輯:C++入門知識

[cpp] 
/**
1.利用棧實現數制轉換,要求編程實現以下功能:
a. 編寫文件SqStack.h,定義棧類模板SqStack,以及其上的入棧、出棧、讀棧頂元素、判斷棧是否為空、清空棧及初始化等操作。
b. 編寫一個算法void MultiBaseOutput (int N,int B)實現利用棧將一個十進制整數N轉換為另一個等價的基為B的B進制數並輸出到屏幕。
    如果B為16,能輸出A、B、C、D、E、F.例如十進制15應轉化為16進制F。
c. 編寫測試主函數。測試將一個十進制數30分別轉化為二進制數、八進制數及十六進制數。
*/ 
#include"Stack.h" 
#include<iostream> 
using namespace std; 
 
void MultiBaseOutput (int N,int B) 

    SqStack<char>ST(100); 
    int temp,l; 
    char T; 
    char t = 'A'; 
    while(N) 
    { 
        temp = N%B; 
        if(temp > 9) 
        { 
            l = temp -10; 
            ST.push_stack(char(t+(temp -10))); 
        } 
        else 
        { 
            ST.push_stack(char(temp+'0')); 
        } 
        N/=B; 
 
    } 
    while(!ST.Empty()) 
    { 
        ST.pop_stack(T); 
        cout<<T<<" "; 
    } 
     

int main() 

    int m =0,n=0; 
    cout<<"這是一個十進制數轉化為二進制數、八進制數及十六進制數的演示程序......................."<<endl; 
    cout<<"請輸入十進制數:"; 
    cin>>m; 
    cout<<endl; 
    cout<<"請輸入你想將十進制轉換成的進制:"; 
    cin>>n; 
    cout<<"十進制的:"<<m<<"轉換成"<<n<<"進制的數是:"; 
    MultiBaseOutput (m,n); 
 
    cout<<endl; 
    return 0; 

/**************************頭文件*************************/ 
//Stack.h 
#include<iostream> 
using namespace std; 
template<class T> 
class SqStack 

    public: 
        SqStack(); 
        SqStack(int size); 
        //SqStack(const SqStack<T> ©); 
        //void operator=(const SqStack<T> ©); 
        virtual ~SqStack(); 
        int Length()const; 
        bool Empty()const; 
        void Clear(); 
        void traverse(void (*visit)(T &)); 
        T & top_stac()const;//去棧頂元素 
        void push_stack(const T &);//入棧 
        void pop_stack(T &e);//出棧 
        void init(int size); 
        void top_stack(T &e)const; 
        bool full() 
        {  www.2cto.com
            return m_top>= m_size; 
        } 
    protected: 
        int m_top; 
        int m_size; 
        T *m_base; 
}; 
template<class T> 
SqStack<T>::SqStack() 

    m_top=0;  
    m_size=100; 
    m_base=new T[m_size]; 

 
template<class T> 
SqStack<T>::SqStack(int size) 

    m_top = 0; 
    m_base = new T[size]; 
    m_size = size; 

template<class T> 
SqStack<T>::~SqStack() 

    if(m_base != NULL) 
    delete [] m_base; 

template<class T> 
int SqStack<T>::Length()const 

    return m_top; 

template<class T> 
bool SqStack<T>::Empty()const 

    return m_top==0; 

template<class T> 
void SqStack<T>::Clear() 

    m_top = 0; 

template<class T> 
void SqStack<T>::traverse(void (*visit) (T&)) 

    for(int curposition=1;curposition<=length();curposition++) 
    { 
        (*visit)(m_base[curposition-1]); 
    } 

template<class T>  
void SqStack<T>::push_stack(const T &e) 

    if(full()) cout<<"stack is full"; 
    else 
    { 
        m_base[m_top++]=e; 
    } 
     

template<class T> 
void SqStack<T>::top_stack(T &e)const 

    if(Empty()) 
        cout<<"stack is empty"; 
    else 
    { 
        e=m_base[m_top-1]; 
    } 

template<class T> 
void SqStack<T>::pop_stack(T &e) 

    if(Empty()) 
        cout<<"stack is empty"; 
    else 
    { 
        e=m_base[m_top-1]; 
        m_top--; 
    } 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved