首页 > 编程语言 >PTA基础编程练习题目集 7—4 BCD解密

PTA基础编程练习题目集 7—4 BCD解密

时间:2024-03-24 11:30:41浏览次数:33  
标签:转换成 进制 十六进制 BCD 16 解密 PTA 十进制

题目描述:

BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了!

现在,你的程序要读入这个错误的十进制数,然后输出正确的十进制数。提示:你可以把18转换回0x12,然后再转换回12。

输入格式:

输入在一行中给出一个[0, 153]范围内的正整数,保证能转换回有效的BCD数,也就是说这个整数转换成十六进制时不会出现A-F的数字。

输出格式:

输出对应的十进制数。

输入样例:

18

输出样例:

12

 源代码:

#include<stdio.h>
int main()
{
    int BCD, a, b;
    scanf("%d", &BCD);
    a = BCD % 16;//个位
    b = BCD / 16;//十位
    printf("%d", b * 10 + a);
    return 0;
}

PS:其实考察关键是10进制如何转换成16进制

相关知识分析:

这道题目有意思的地方在于什么是BCD数,如果这个搞不清楚的话,想必你和屏幕前刚写这道题的我一样,一脸懵。建议看这个视频了解最基本的相关知识。【原理 5.1】BCD码;BCD码转换;十进制转BCD码;BCD码的算法;_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1WT4y1s7y4/?spm_id_from=333.337.search-card.all.click&vd_source=85eaf6c80856e68e43b8a974069037a7

补充: BCD(Binary-Coded Decimal)是一种用二进制编码表示十进制数字的方法。在BCD中,每个十进制数字由其二进制表示的4位组成。

举个例子,我们有一个十进制数字123。我们要把它转换成BCD。

1变成了0001,

2变成了0010,

3变成了0011。

然后,我们把这些二进制数放在一起,得到0001 0010 0011。

现在,把这个二进制数转换成十六进制。每四个二进制位对应一个十六进制数。

0001 -> 1

0010 -> 2

0011 -> 3

所以,整个BCD数字123转换成十六进制就是0x123。

解析:

OK,接下来让我们分析这道题目 BCD的 0X12为什么被小明转换成18了呢? 因为0X12的BCD形式为0001 0010(前四位表示十位数,后四位表示个位数),再利用2进制与10进制的转换,1*2的4次方 + 1*2的1次方 = 18。注意0X12表示的是10进制的12。

既然原理理解了 ,让我们分析代码,题目意思其实很简单,将10进制转换成16进制即可,只要我们将这个数对16分别进行整除与取余操作即可完成了。

看到这会不会觉得出题人兜了一大圈子原来是这个意思,觉得被戏耍了,哈哈哈哈,作者也有这个感觉,但是这道题其实是在锻炼我们提取关键信息的能力。

测试点:

 

标签:转换成,进制,十六进制,BCD,16,解密,PTA,十进制
From: https://blog.csdn.net/2302_80827873/article/details/136983557

相关文章

  • PTA 后缀式求值(整型版)
    我们人类习惯于书写“中缀式”,如 3+5*2 ,其值为13。(p.s.为什么人类习惯中缀式呢?是因为中缀式比后缀式好用么?)而计算机更加习惯“后缀式”(也叫“逆波兰式”,ReversePolishNotation)。上述中缀式对应的后缀式是: 352*+现在,请对输入的后缀式进行求值。为了简化输入处......
  • iptables-save 命令使用总结
    转载请注明出处:iptables-save 命令在Linux系统中用于将当前运行的 iptables 防火墙规则导出到一个文件中。这对于备份规则、迁移规则或在不同系统间共享规则配置非常有用。基本用法基本用法是将当前的 iptables 规则保存到文件中,如下所示:iptables-save>/pat......
  • RSA加密解密
    c# usingSystem;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Linq;usingSystem.Security.Cryptography;usingSystem.Text;usingSystem.Threading.Tasks;namespaceCommon{publicclassRSA{///<summary>......
  • PTA:7-68 Redemption
    作者 郭天宸单位 山东大学(威海)Iamdreadfullysorryforyourbadexperience,suchalownumberofsubmissionsaswellaspassratesandmy inSHIZHANYI.Isetupsomechallengingdatapointsandsomealittltbithardproblems.Ifyouareintere......
  • PTA:7-66 华氏温度转换为摄氏温度
    作者 伍建全单位 重庆科技大学输入一个华氏温度,输出摄氏温度,其转换公式为:C=5(F-32)/9。输入格式:输入一个浮点型的华氏温度值。输出格式:输出摄氏温度。输入样例:在这里给出一组输入。例如:96输出样例:在这里给出相应的输出。例如:35.555556代码长度限制16KB......
  • PTA:7-73 n个小朋友分糖果
    作者 庄波单位 山东航空学院为了培养小朋友们分享的意识,老师教小朋友做分糖果的游戏,把自己带的糖果分给其他小朋友。首先,全班 n 个小朋友围成一个大圆圈,按排列顺序依次给他们编号 1,2,…,n。然后,从 1 号小朋友开始,将自己的糖果平均分成三份(如果有多余的糖果则立即吃......
  • C++模板实现之谜:为何只能在头文件中?解密原因与高级分离技术
     概述:C++中模板必须在头文件中实现,因为编译器需要可见的实现以生成模板具体实例的代码。通过头文件,确保模板在每个编译单元中都能被正确展开,提高可维护性。在C++中,模板只能在头文件中实现的主要原因是编译器在使用模板时需要生成对应的代码,而这部分代码必须在编译时可见。以......
  • ptaL2-008manachar做法
    之前考虑过如果输入样例很大怎么办,但是没有细想,今天看了看manachar,懊悔如果这个题样例增大一些变成L330分就好了hh,相比于洛谷上的模板题,这个题唯一不一样的就是有空格,所以不能再用char数组来保存,改用string来存储,C++中的getline函数前几天刚了解到正好也派上用场了constin......
  • 密码加密|jsencrypt|md5|加密解密的两种方式
    一、md5npminstallmd5二、JSEncrypt2.1介绍JSEncrypt属于RSA加密,RSA加密算法是一种非对称加密算法;2.2使用安装:npminstalljsencrypt--dev封装工具:utils/jsencrypt.jsimportJSEncryptfrom'jsencrypt/bin/jsencrypt.min'//密钥对生成http://web.cha......
  • 使用AES进行加解密
    今天来使用aes对sk(一个字段)进行加解密,要求秘钥一半在配置文件,一般写死aes就是一个加解密的工具,有加密和解密二个方法,是可逆的packagecom.huawei.koophone.openpower.common.utils.algo;importlombok.extern.slf4j.Slf4j;importorg.apache.commons.codec.DecoderExcep......