当前位置:编程学习 > 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.zzzyk.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--; 
    } 

补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,