做一个豁达而努力的自己。
这里的进制转换是基于顺序栈的基础上写的,主要是将十进制通过一个函数转换成八进制然后存储到栈中,最后输出。
转换函数:
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; }