c语言编程题:BCD解密

前言:什么是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]。


编程思路分析

  1. 输入一个错误的十进制数。(例如18)
  2. 运算。
  3. 输出一个正确的十进制数。(12)

重点运算思路

  首先,据题目推测,该题所用的BCD编码为8421BCD码:十进制18的二进制为0001 0010。0001 0010表示12。

  1. 将转换数字转换为BCD码的十进制:/ 16分为十位,%16分为个位。
    例18:18 / 16 = 1;18 % 16 = 2。
  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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值