先看一下手工模拟的进制转换,例如10进制转8进制:
N N / 8 N mod 8
1348 168 4
168 21 0
21 2 5
2 0 2
(1348)10 = (2504)8
上述过程很明显了:进制转换就是逐步摸、除之后结果的倒序。
即最后一步的摸2,是8进制数的最左位置。
这是栈一个应用了,由于它的LIFO特性,我们可以把第一个mod出来的余数入栈,当余数都入栈后,依次出栈。
当然,我们也可以用更简单的数组来实现,例如:
#include <stdio.h>
#define MAX_BUF 100
void base_conv(int num, int base, int* buf, int* len)
{
int i = 0;
while(num)
{
buf[i++] = num % base;
num = num / base;
}
*len = i;
}
void base_print(int base, int* buf, int len)
{
static char* digits = "0123456789abcdefghijklmnopqrstuvwxyz";
int i = 0;
for(i=len-1;i>=0;i--)
{
printf("%c", digits[buf[i]]);
}
printf("\n");
}
int main()
{
int num = 1000;
int base = 16;
int buf[MAX_BUF];
int len = 0;
base_conv(num, base, buf, &len);
base_print(base, buf, len);
return 0;
}