手动实现:十进制转换十六进制

思路:

1.将初始数字赋给被除数,除16,得商数和余数,第一次余数保存在数组里,数组下标加一

2.将第一次的商数置为被除数,再除16,得商数和余数,第二次余数保存在数组里,数组下标加一

将前两步反复执行,直到商数为0

3.倒序输出余数,for循环得递减

4.将余数进行判断,若余数在0-9之间,则输出原数字(以字符形式输出);在10-15之间,输出A~F

(假设num=11,'A' + 1时,字符’A’被转换为它的ASCII码65,然后加上1,得到66。然后,这个数字被转换回字符,得到字符’B’)

错误:

1.想不出要怎么倒序输出余数

2.check_num函数返回类型为int

3.check_num的返回值应该是一个字符,而不是一个数字,没有加上‘0’

4.想不出可以用'A' + num - 10的方式求A~F

#define max 1000
char check_num(int num)
{
	if (num >=0 && num <=9)
	{
		return '0' + num;
	}
	if (num >=10 && num <= 15)
	{
		return 'A' + num - 10;
	}
}
void turn(int num)
{
	int chu = num;
	int yu[max] = { 0 };
	int i = 0;
	int j = 0;
	while (chu)
	{
		yu[i] = chu % 16;
		chu = chu / 16;
		i++;
	}
	for (j = i - 1; j >= 0; j--)
	{
		printf("%c",check_num(yu[j]));
	}
}
int main()
{
	int num = 23;
	turn(num);
	return 0;
}

你可能感兴趣的:(算法,c语言)