数据结构重读 - 进制转换

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

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *