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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!