进制转换,指的是将某一种进制的数转换为另一种进制的数表示。在计算机领域经常用到,二进制,十进制,十六进制之间的相互转换。
本文基于栈这一工具实现进制的转换,主要是因为在数学上,我们利用短除法来解决这一问题,先求得的余数在表达上放在最后,这种机制跟栈的机制很像。
首先我们先建立栈,并且保证其具有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);
}
}