什么是栈?栈是限定元素插入和删除位置的线性表,即仅能在表尾进行插入和删除操作的线性表
栈的特点:先进后出/后进先出
如何进行进制转换:用倒序取余法将十进制转成任意进制,用栈存储每次的余数,借助栈先进后出的方式倒序输出余数,实现进制转换
顺序栈根据存储结构的不同分为:线性栈(线性存储结构)和链栈(链式存储结构)
Description
利用栈进行十进制数与N进制(如二进制、八进制、十六进制)数据之间的转换。
Input
(输入需要转换的十进制数):123456789
(需要转换的数制):16
Ouput
(转换后的进制数):75BCD15
Sample Input
123456789
16Sample Output
75BCD15
顺序栈实现代码:
#include<iostream> using namespace std; const int MaxSize = 100; //容量 const int MaxMaxSize = 100; //扩容容量 class SeqStack { public: SeqStack(); ~SeqStack(); int Empty(); void Push(int x); int Pop(); int* base;//栈底 int* top;//栈顶 int StackSize;//栈的容量 }; //初始化栈,创建一个空栈 SeqStack::SeqStack() { StackSize = MaxSize; base = (int*)malloc(StackSize * sizeof(int)); top = base; } SeqStack::~SeqStack() { if(base) delete base; if(top) delete top; } //判断栈是否为空 int SeqStack::Empty() { if (top != base) return 0; else return 1; } //入栈 void SeqStack::Push(int x) { if (top - base >= StackSize)//栈满的话重新分配空间 { StackSize += MaxMaxSize; base = (int*)realloc(base, StackSize * sizeof(int)); top = base + MaxMaxSize; } *(top) = x; top++; } //出栈 int SeqStack::Pop() { int x; if (Empty()) throw"下溢"; top--; x = *(top); return x; } //进制转换 void Conversion(long long int oriNumber, int cvNumber) { char a = 65; SeqStack S; int x; while (oriNumber) { x = oriNumber % cvNumber; S.Push(x);//余数入栈 oriNumber /= cvNumber; } while (S.top != S.base)//余数出栈 { x = S.Pop(); /*当转换的进制是十进制以上时,会有字母出现,所以就要用到字符的知识来表示字母*/ if (x >= 10) { a = x + a - 10; cout << a; } else cout << x; a = 65; } } int main() { long long int oriNumber; int cvNumber; while (cin >> oriNumber >> cvNumber) { Conversion(oriNumber, cvNumber); cout << endl; } }