1.问题描述
将一个十进制整数N转换成八进制,把N与8求余得到八进制数的各位依次进栈,计算完毕后将栈中的八进制依次出栈输出,输出的结果就是待求八进制数
2.算法设计步骤
- 初始化一个空栈
- 把N与8求余得到的八进制数压入栈中
- 分别把栈中的数一个一个输出出来
3.代码详解
#include<iostream>
using namespace std;
#define MAXSIZE 100
#define SElemType int
#define Status int
#define OK 1
#define ERROR 0
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S)//初始化栈
{
S.base=new SElemType[MAXSIZE];
if(!S.base)
exit(0);
S.top=S.base;
S.stacksize=MAXSIZE;
return OK;
}
Status Push(SqStack &S,SElemType e)//栈顶加入一个元素
{
if(S.top-S.base==S.stacksize)
return ERROR;
*S.top++=e;
return OK;
}
Status Pop(SqStack &S,SElemType &e)//栈顶弹出一个元素
{
if(S.base==S.top)
return ERROR;
e=*--S.top;
return OK;
}
Status Empty(SqStack S)//判断栈是否为空
{
if(S.base==S.top)
return OK;
return ERROR;
}
void conversion(int N,SqStack &S)//实现进制转换
{
int e;
InitStack(S);
while(N)
{
Push(S,N%8);
N=N/8;
}
while(!Empty(S))
{
Pop(S,e);
cout<<e;
}
}
int main()
{
SqStack S;
conversion(17,S);
}