先看一下手工模拟的进制转换,例如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; }