源程序及注释
#include<iostream>
using namespace std;
#define ERROR 0
#define OK 1
typedef int SElemType;
typedef int Status;
#define MAXSIZE 100 //顺序栈存储空间的初始分配量
//顺序站的存储结构
typedef struct {
SElemType *base; //栈底指针
SElemType *top; //栈顶指针
int stacksize; //栈可用的最大容量
}SqStack;
//初始化操作
Status InitStack(SqStack &S)
{
//构造一个空栈
S.base = new SElemType[MAXSIZE]; //动态分配一个MAXSIZE的数组存储空间
if (!S.base)
{
cout << "初始化失败" << endl; //存储分配失败
exit(OVERFLOW);
}
cout << "初始化成功" << endl;
S.top = S.base; //top初始为base,空栈
S.stacksize = MAXSIZE; //stacksize放置栈的最大容量
return OK;
}
//入栈
Status Push(SqStack &S, SElemType e)
{
if (S.top - S.base == S.stacksize)
{
return ERROR;
}
*S.top++ = e;
//*S.top=e;
//S.top++;
return OK;
}
//判断空栈
Status StackEmpty(SqStack &S)
{
if (S.top == S.base)
return 1;
else
return 0;
}
//出栈
Status Pop(SqStack &S, SElemType &e)
{//删除S的栈顶元素,用e返回其值
if (S.top == S.base)
return ERROR;
e = *--S.top;
return OK;
}
//转换
Status zhuan_huan(SqStack &S,int m,int n)
{
int i, e;
while (m != 0)
{
Push(S, m%n); //将转换的进制数放入栈中
m = m / n;
}
while (!StackEmpty(S)) //输出转换后的进制数
{
Pop(S, e);
if (e > 9) //十六进制时输出字母
{
e = e + 55;
cout << (char)e;
}
else
cout << e;
}
cout << endl;
return OK;
}
Status main()
{
//初始化操作
SqStack S;
InitStack(S);
//转换
cout << "请输入这个十进制的整数:";
int m,n;
cin >> m;
cout << "请输入要转换成的进制数:";
cin >> n;
cout << "将十进制整数" << m << "转换为" << n << "进制数为:";
zhuan_huan(S, m, n);
return OK;
system("pause");
}
运行结果