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


 一.题目描述🍗

不使用%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;
}

四.运行结果🍗


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

最近更新

  1. TCP协议是安全的吗?

    2023-12-14 10:08:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-14 10:08:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-14 10:08:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-14 10:08:03       20 阅读

热门阅读

  1. CENTOS 安装zookeeper

    2023-12-14 10:08:03       47 阅读
  2. Active Objects设计模式

    2023-12-14 10:08:03       52 阅读
  3. 卷积的计算 - numpy的实现 1

    2023-12-14 10:08:03       38 阅读
  4. 前端HTML

    2023-12-14 10:08:03       37 阅读
  5. 网络安全知识点总结

    2023-12-14 10:08:03       41 阅读
  6. 数据存储:整形

    2023-12-14 10:08:03       33 阅读
  7. GPS北斗卫星时空信号安全防护装置(授时)介绍

    2023-12-14 10:08:03       46 阅读
  8. Spring中的经典的9种设计模式

    2023-12-14 10:08:03       26 阅读