利用栈实现十进制数数制转换成其他进制数
[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++ ,