今天这道题目呢,与前天讲的“龟兔赛跑”都是从PAT的基础编程题目中节选过来的。
难度不是很大,但是特别基础,复习到了基础知识,也就是二进制、十进制两者之间的相互转换。
我们先来看看这道题目的要求:
BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。
所以,如果一个BCD数的十六进制为0x12,那么它的十进制也是12。
此时有一位小伙伴并不知道BCD数的运算规则,直接把0x12当作二进制来转换成十进制,那就会得到18。
现在呢,我们就期望能把这个错误得到的十进制,转换成我们期望得到的十进制数值。
给定的这个错误十进制范围为[0,153]。
题目要求呢我们都清楚了,接下来就是如何解决这个问题。
这里呢,主要涉及到的是十六进制和十进制之间以及二进制和十进制之间的转换。
但我呢,好像把这道题目给想复杂了emm,结果导致简单问题复杂化,实在是不应该啊。
程序要写正确的话,流程图用来帮助理清逻辑非常好用,这张流程图画的有些小,真的有些不好意思。
可以从这张流程图中看出来,我的逻辑就是:
把该同学输入的整数先转换为二进制数,比方说给定的十进制数为18。
那么转换成的二进制数则为00010010。
之后再把二进制数转换为十六进制的形式则为0001和0010。
之后分别转换为十进制得到1和2。
然后求和1*10 2*1=12,最终得到结果。
注意,这里我用到了一个pow函数,这是一个求幂次方的函数,在用这个函数的时候,需要调用库#include