做一个豁达而努力的自己。
这里的进制转换是基于顺序栈的基础上写的,主要是将十进制通过一个函数转换成八进制然后存储到栈中,最后输出。
转换函数:
void Conversion(SqStack &s, int n)
{
InitStack(s); //栈的初始化
while(n) //将十进制转换成八进制存储到栈中
{
Push(s, n % 8);
n = n / 8;
}
int e;
while(!EmptyStack(s)) //若为空结束循环
{
GetTop(s, e); //获取栈顶元素
cout << e;
Pop(s, e); //删除已输出的数字
}
cout << endl;
}
代码:
#include <iostream>
using namespace std;
#define MAXSIZE 100
typedef struct
{
int *base;
int *top;
}SqStack;
bool InitStack(SqStack &s)
{
s.base = new int[MAXSIZE];
if(!s.base)
return false;
s.top = s.base;
return true;
}
bool Push(SqStack &s, int e)
{
if(s.top - s.base == MAXSIZE)
return false;
*(s.top++) = e;
return true;
}
bool Pop(SqStack &s, int &e)
{
if(s.base == s.top)
return false;
e = *(--s.top);
return true;
}
bool EmptyStack(SqStack s)
{
if(s.base == s.top)
return true;
return false;
}
bool GetTop(SqStack s, int &e)
{
if(s.base == s.top)
return false;
e = *(s.top - 1);
return true;
}
//十进制转化为八进制
void Conversion(SqStack &s, int n)
{
InitStack(s);
while(n)
{
Push(s, n % 8);
n = n / 8;
}
int e;
while(!EmptyStack(s))
{
GetTop(s, e);
cout << e;
Pop(s, e);
}
cout << endl;
}
int main()
{
SqStack s;
for(int i = 1; i < 6; i++)
{
int n;
cin >> n;
Conversion(s, n);
}
return 0;
}