#t8. BCD数转换修复
BCD数转换修复
BCD数转换修复
题目描述
BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。如果一个BCD数的十六进制是0x12,它表达的是十进制的12。小明误把所有BCD数当作二进制数转换成十进制输出了,例如BCD的0x12被输出成了十进制的18。你的程序要读入这个错误的十进制数,输出正确的十进制数。
输入格式
输入在一行中给出一个[0, 153]范围内的正整数,保证能转换回有效的BCD数,即该整数转换成十六进制时不会出现A-F的数字。
输出格式
输出对应的正确十进制数。
样例输入 1
18
样例输出 1
12
样例输入 2
0
样例输出 2
0
样例输入 3
153
样例输出 3
99
数据范围
输入整数范围为
提示
十六进制每位满 16 进一,所以「高一位」的权值是 16。把一个数拆成两位十六进制:n / 16 得高位,n % 16 得低位。
BCD 用 4 个二进制位存一位十进制数,所以一个字节正好存两位十进制数;题目里被误当成二进制读,等价于「把十六进制当十进制」。
- 先读懂题目在说什么:机器把十六进制的 0x12 当二进制算成了 18,现在要还原。
- 还原就是把输入的十进制数当成十六进制来拆:高 4 位是十位,低 4 位是个位。
- 用
/16和%16拆,和你拆三位数用/10、%10是同一个套路。
自查:用
18 → 12、153 → 99两个样例验证;153 = 0x99,所以输出 99。
相关
在以下作业中: