当前位置:首页 > 生活百科

16进制解码转换(汉字十六进制转换工具介绍)

栏目:生活百科日期:2025-05-06浏览:0

今天这道题目呢,与前天讲的“龟兔赛跑”都是从PAT的基础编程题目中节选过来的。

难度不是很大,但是特别基础,复习到了基础知识,也就是二进制、十进制两者之间的相互转换。

我们先来看看这道题目的要求:

BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。

所以,如果一个BCD数的十六进制为0x12,那么它的十进制也是12。

此时有一位小伙伴并不知道BCD数的运算规则,直接把0x12当作二进制来转换成十进制,那就会得到18。

现在呢,我们就期望能把这个错误得到的十进制,转换成我们期望得到的十进制数值。

给定的这个错误十进制范围为[0,153]。

题目要求呢我们都清楚了,接下来就是如何解决这个问题。

这里呢,主要涉及到的是十六进制和十进制之间以及二进制和十进制之间的转换。

但我呢,好像把这道题目给想复杂了emm,结果导致简单问题复杂化,实在是不应该啊。

理清逻辑,画出流程图,这是十进制转换为二进制再进行BCD解密

程序要写正确的话,流程图用来帮助理清逻辑非常好用,这张流程图画的有些小,真的有些不好意思。

可以从这张流程图中看出来,我的逻辑就是:

把该同学输入的整数先转换为二进制数,比方说给定的十进制数为18。

那么转换成的二进制数则为00010010。

之后再把二进制数转换为十六进制的形式则为0001和0010。

之后分别转换为十进制得到1和2。

然后求和1*10+2*1=12,最终得到结果。

我的代码部分:

注意,这里我用到了一个pow函数,这是一个求幂次方的函数,在用这个函数的时候,需要调用库#include&<math.h&>。

#include&<stdio.h&>#include&<math.h&>int main(){    int number = 0;//初始化定义需要输入的十进制数    int store&[8] = {0};    int mod = 0;    int mild1 = 0;//求和    int mild2 = 0;//求和    scanf("%d", &&number);    for(int i = 0; i &< 8; i++){        mod = number%2;        number = number/2;        store&[i] = mod;    }    for(int i = 7; i &>= 4; i--){                if(store&[i]==1){            mild1 = mild1+pow(2,i-4);        }    }        for(int i = 3; i &>= 0; i--){                if(store&[i]==1){            mild2 = mild2+pow(2,i);        }    }    printf("%d", mild1*10+mild2);    printf("n");}

测试结果:

提交PAT测试结果:

但是呢,我在思考,这道题目有没有更快的方法了。

毕竟这样从二进制开始写,十进制转化为二进制,然后再转化为十六进制,然后分开二进制转化为十进制的确麻烦了些。

于是,我再来认真地读了一遍这道题。

读来读去,只发现这道题是只需要我们直接把十进制转化为十六进制即可!然后再直接计算不就行了么。

BCD太迷惑人了!

十进制转化为十六进制的流程:

给定一个数18,18除以16等于1取余数得到2,再把1除以16等于0取余数得到1。

1和2组合起来,不也能得到最终结果吗?

流程图,这是十进制转换为十六进制再进行BCD解密

我的代码部分

#include&<stdio.h&>int main(){    int number = 0;//初始化定义需要输入的十进制数    int store&[8];    int mod = 0;    scanf("%d", &&number);    for(int i = 0; i &< 8; i++){        mod = number%16;        number = number/16;        store&[i] = mod;    }    printf("%d",store&[1]*10+store&[0]);}

测试结果

提交PAT测试结果

总结

在做这道题目的时候,我遇到了很多很多问题。

比方说逆序输出的时候,我直接把1和2按照顺序打出,但这样的话就会产生问题,最小值该如何判断。

还有要用到pow函数,这个可不能忘了。

总的来说,这道题呢,关键还是考我们对十进制、二进制和十六进制之间的转换是否熟悉。

如果很熟悉的话,这道题目直接十进制与十六进制转换一下就做出来了。

没必要像我最开始写的那样兜一个大圈子。

“16进制解码转换(汉字十六进制转换工具介绍)” 的相关文章

mac删除快捷键怎么设置(mac快捷键设置和操作技巧)

在Windows电脑中,有两个键可以实现删除的功能,一个是画着←的BackSpace退格键,一个是Delete键。退格键可以删除光标左边的文字,Delete键可...

台式电脑怎样连接wifi热点,教你一招快速连接

一般来说,台式机都是通过接入有线网络实现上网的,但是一些人想要通过无线网络来上网,由于绝大数的台式机没有板载无线网卡,因此无法通过路由器的无线WIFI来进行上网...

b2b医药电商平台排名,中国医药电商10强是哪些

药品消费不同于一般消费品,是刚性需求,大多属于发病后购药,仅持续用药患者会提前购买和储备,现持续用药群体(主要慢病患者)是电商发展的主力军。我国药品电商的潜在空...

付费推广方式有哪些,百度常见的5种付费推广方式

现在很多商家在百度上投放广告,只知道花钱做排名,但是对于百度的其他推广方式却不是很熟悉。百度付费推广方式有很多,几乎在百度所有产品中都可以看到广告以不同的形式出...

去健身房戴什么运动蓝牙耳机好?健身房大神都在用的运动

在外跑步或者在健身房,想听歌来点动力,耳机线简直就是心情最大的敌人,跑步摆手的时候容易碰到,摆弄器械的时候容易碰到。如果运动量特别大,出汗特别多的时候,汗液还容...

在线英语培训机构比较好的,推荐3家纯外教一对一辅导的

上期出了12家英语启蒙机构之后,今天将出一期11家线上英语机构的全方位测评,下面就来看一下吧!01VIPKIDVK很多家长都非常熟悉了,1V1北美外教线上班,它...

入耳式蓝牙耳机排行榜(五款重低音强劲的蓝牙耳机)

蓝牙耳机的佩戴方式,分为半入耳式和入耳式两种,入耳式有更好的隔音,能打造一个密闭的环境,有被动降噪的效果,市面上绝大部分蓝牙耳机都是采用入耳式的佩戴方式。而蓝牙...

pdf如何去除水印和文字(三种最简单方法)

如何快速地给PDF文件添加水印呢?给PDF加水印这个方法很有朋友可能不太知道,今天,小编给大家介绍两个添加水印的简单方法,可以迅速给PDF文件添加水印,一起来看...

seo排名怎么做,seo网站排名的技巧

如何做seo网站排名?seo优化排名有什么方法?不做seo的网站会降低自身的价值,利用seo技术将网站的排名做出来则会提升网站的价值,通过个人的专业技能或者团队...

excel只保留数字部分(四种excel提取数字的方法)

前天我建的办公技术群里,有个做财务的群友提问,能不能通过自定义单元格格式在Excel里实现:以万元为单元、显示2个小数位的数字,保留原始数据。为啥要强调自定义格...