前言:什么是BCD码?
BCD码(Binary-Coded Decimal),是一种二进制的数字编码形式,用二进制编码的十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。
新手可以了解的最基本和最常用的BCD码:8421BCD码。它和四位自然二进制码相似,各位的权值为8、4、2、1(0000),故称为有权BCD码。
题目:
BCD数是用一个字节来表示两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表示的就是十进制的12。但是小明没有学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制18了!
现在,你的程序要读入这个错误的十进制数,让然后输出正确的十进制数。提示,你可以把18转换回0x12,然后再转换回12。
ps:该题目给出的范围是[0,153]。
编程思路分析:
- 输入一个错误的十进制数。(例如18)
- 运算。
- 输出一个正确的十进制数。(12)
重点运算思路:
首先,据题目推测,该题所用的BCD编码为8421BCD码:十进制18的二进制为0001 0010。0001 0010表示12。
- 将转换数字转换为BCD码的十进制:/ 16分为十位,%16分为个位。
例18:18 / 16 = 1;18 % 16 = 2。 - 组合为正确的十进制数:十位 * 10 + 个位
例18:1*10 + 2 = 12
实现代码如下:
#include <stdio.h>
int main(){
int i;
scanf("%d",&i);
int i1 = i/16;//十位
int i2 = i%16;//个位
i = i1*10 + i2;
printf("%d",i);
return 0;
}