C语言--不使用%x,实现把一个十六进制的数字转为十进制,比如输入123,输出7B

2023-12-14 09:34:37


?一.题目描述🍗

不使用%x,实现把一个十六进制的数字转为十进制

比如输入1234,输出4D2

如果使用%x,那么问题变得很简单,只需要控制一下输出格式即可

int main()
{
	int n;
	printf("请输入一个数字 :");
	scanf("%d", &n);
	printf("%X", n);
	return 0;
}


二.思路分析🍗

如果不使用计算机,我们如何把一个十进制的数字转为十六进制呢?

答:不断对要求转换的进制求余数,最后余数反转。

比如:十进制的123想要转为十六进制,就是对16不断取余,最后把余数反转,即7B。

转为二进制也是一样的,就是对2不断取余,最后再把余数反转即可。

?不靠计算机的求法我们可以算了,接下来我们把上面的过程写成算法即可。?

首先定义一个数组arr,用来存储十六进制的每一个数字:0-9,A-F。再定义一个新的数组brr,用来存储相应的十六进制数字,然后对所输入的数字求余数,以余数为下标对应的arr数组元素赋值给新的brr数组。最后将brr逆序输出。

123除以16==7....11(B)

7除以16==0......7

?


?三.完整代码🍗

#define _CRT_SECURE_NO_WARNINGS //这一句必须放在第一行
#include <stdio.h>
#include <stdlib.h>
//不使用%x,实现把一个十六进制的数字转为十进制,比如输入1234,输出4d2
int main()
{
	char arr[17] = "0123456789ABCDEF";//用一个数组存储十六进制数
	char *brr=(char*)malloc(100*sizeof(char));//定义一个新的数组,储存输入的十进制数对应的十六进制数
	int n;
	int index=0;//新数组的下标
	printf("请输入一个数字 :");
	scanf("%d", &n);//输入要转换的十进制数

	//当n==0时,进入不了循环,需要单独写
	if (n == 0)
		printf("0");

	while (n != 0)
	{
		index++;//初始值为1
		brr[index] = arr[n % 16];  //把对应的十六进制字符存储到新的数组当中
		n = n / 16;
	}

	for (int i = index;i >0;i--)//逆序输出,由于index初始值为1,所以不用输出brr[0]
		printf("%c", brr[i]);
	free(brr);
	return 0;
}

四.运行结果🍗


创作不易,如果对您有帮助的话给小编一个赞👍以表鼓励吧!

文章来源:https://blog.csdn.net/m0_75266675/article/details/134896276
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。