进制转换,指的是将某一种进制的数转换为另一种进制的数表示。在计算机领域经常用到,二进制,十进制,十六进制之间的相互转换。
本文基于栈这一工具实现进制的转换,主要是因为在数学上,我们利用短除法来解决这一问题,先求得的余数在表达上放在最后,这种机制跟栈的机制很像。
首先我们先建立栈,并且保证其具有initial(),pop(),push(),is_empty()等基本操作。代码如下:
1.建立一个关于栈的结构体:
typedef struct stack { char* base; char* top; int lengrh; }stack;2.initial()等操作函数:
void initial_stack(int n, stack* s) { s->base = (char*)malloc(n * sizeof(char)); s->lengrh = n; s->top = s->base; } void push_stack(char ch, stack* s) { if (s->top - s->base == s->lengrh) { printf("full"); return; } *(s->top++) = ch; void pop_stack(stack* s) { if (s->top == s->base) { printf("empty"); return; } printf("%c ", *--s->top); } bool empty(stack* s) { if (s->base == s->top) return true; else return false; } void get_top(stack* s) { printf("%c ", *(s->top - 1)); } void clearn_stack(stack* s) { if (s->base) free(s->base); }3.进制转换
void number_convert(stack* s, int value,int hex) { char digit[] = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' }; do { push_stack(digit[value % hex], s); } while (value /= hex); while(empty(s)==false) { pop_stack(s); } }