#P05029. 二进制与十六进制转换

二进制与十六进制转换

题目背景

二进制数只有 0011 两个基本数字(数码)。十六进制数有 090~9,以及 ABCDEF 十六个数码,其中 ABCDEF 分别表示 101510~15


一位十六进制数可以用四位二进制数表示,所以二进制数转十六进制数有快捷方法,具体方法如下:

  1. 分组。将二进制数整数部分从低位到高位四位一组,每一组组成二进制数,如果组内数字不够四个高位补零;将二进制数小数部分从高位到低位四位一组,每一组组成二进制数,如果组内数字不够四个末尾补零。
  2. 按组转换。将分组后的每一组二进制数转换成对应的十六进制数,然后按顺序将每组转换结果拼接就是最终转换结果。

image


十六进制数转二进制数正好是上述步骤的逆过程,只需要将十六进制的每一位转换成四位二进制数拼接在一起,去掉整数部分高位和小数部分低位多余的 00 即可。

image

题目描述

给定若干二进制数/十六进制正数,将它们转换成对应的十六进制数/二进制数。

输入格式

11 行是正整数 NN,表示要处理 NN 个进制数转换。

接下来有 NN 行,每行是两个用空格隔开的字符串。第一个字符串 ss,表明要转换的数的进制:如果 ss 值为 bin 表示要转换的数是二进制,那么需要将它转换成十六进制;如果 ss 值为 hex 表示表示要转换的数是十六进制,那么需要将它转换成二进制。第二个字符串是对应进制的正数,可能会出现小数。

输出格式

NN 行,依次是输入的NN 个进制数按要求转换后的结果。如果出现字母,全部用大写。

输入输出样例

3
bin 1111010.11
hex 6F0.A
bin 1101110011000110111110110001000110111001000011010001111110100100110001101
7A.C
11011110000.101
1B98DF623721A3F498D

说明/提示

👀️ 对于100%100\%的数据,1N1001\leq N\leq 100ss 的值是 binhex 中的一个。输入的正数符合该进制的书写规范,整数部分高位、小数部分低位不会出现多余的 00,小数点不会出现在开头或者末尾,十六进制数字母全部是大写。数的长度不会超过 10001000