Program to Convert Hexa-Decimal Number to its Equivalent BCD in Java

2025年5月10日 | 阅读 5 分钟

给定一个十六进制数 N,将该数转换为其对应的二进制编码的十进制数是任务。

示例 1

输入

String str = "2A3"

输出

等效的 BCD 是 0010 1010 0011

解释

2 的二进制是:0010

A 的二进制是:1010

3 的二进制是:0011

因此,等效的 BCD 是 0010 1010 0011。

示例 2

输入

String str = "F4C"

输出

等效的 BCD 是 1111 0100 1100

解释

F 的二进制是:1111

4 的二进制是:0100

C 的二进制是:1100

因此,等效的 BCD 是 1111 0100 1100。

示例 3

输入

String str = "B7D"

输出

等效的 BCD 是 1011 0111 1101

解释

B 的二进制是:1011

7 的二进制是:0111

D 的二进制是:1101

因此,等效的 BCD 是 1011 0111 1101。

朴素方法

为了生成十六进制字符串的 BCD 等效值,代码会遍历每个字符,并使用 ASCII 值比较来确定字符串是字母还是数字。字母通过减去其 ASCII 值 55 来修改,而数字则直接转换为二进制。String.format 用于将每个字符的二进制表示格式化为 4 位并用零填充。由于 StringBuilder 的存在,二进制字符串可以高效地连接起来。为了确保清晰度和符合所需的输出格式,最终的 BCD 结果经过修剪并以有条理的方式打印。

算法

步骤 1:创建一个 StringBuilder 对象 Result 来存储最终的 BCD 表示。

步骤 2:对于字符串 str 中的每个字符

步骤 2.1:验证字符('0' 到 '9')是否为数字。

步骤 2.1.1:使用 Integer.toBinaryString((int) char - '0') 将字符转换为其二进制对应项。

步骤 2.2:如果字符是字母('A' 到 'F'),则

步骤 2.2.1:使用 Integer.toBinaryString((int) char - 55) 将字符转换为其二进制对应项。

步骤 3:使用 String.format("%4s", res).Replace(' ', '0') 确保每个二进制值都有四位,并用前导零填充。

步骤 4:在每个 4 位二进制值之间添加一个空格,并将其附加到 Result 字符串。

步骤 5:添加必要的格式并删除任何多余的空格后,打印完成的 BCD 表示。

实施

输出

 
Therefore, the equivalent BCD is 0010 1010 0011.   

复杂度分析

上述代码的时间复杂度为 O(N),空间复杂度为 O(N)。

方法:使用字符串切片

该代码将十六进制字符串转换为其二进制编码的十进制 (BCD) 对应项,它单独处理每个字符。使用 Character.digit 将十六进制字符转换为其整数值后,它使用 Integer.toBinaryString 获取该字符的二进制等效值。使用 String.format 将每个二进制值填充到四位以确保一致性。此 方法 可确保每个十六进制数字准确地映射到其 4 位二进制等效值。

算法

步骤 1:在名为 bcd 的空字符串 变量 中创建二进制编码的十进制表示。

步骤 2:应用 for 循环 遍历提供的十六进制数中的每个字符。

步骤 3:使用基数为 16 的 int() 函数将字符转换为其相应的 整数 值。

步骤 4:使用 bin() 函数将整数值转换为其二进制等效值。这将产生一个二进制数字字符串,前面带有“0b”。

步骤 5:使用字符串切片 ([2:]) 删除二进制字符串中的“0b”前缀。

步骤 6:使用 zfill() 方法对二进制字符串进行零填充,以确保其有四位数字。

步骤 7:将零填充的二进制字符串添加到 bcd 变量中。

步骤 8:在遍历提供的十六进制数中的每个字符后,返回最终的 bcd 字符串。

实施

输出

 
Therefore, the equivalent BCD is 0010 1010 0011.   

方法:使用查找表方法

该代码使用 HashMap 作为查找表,将十六进制字符('0'-'F')映射到其相应的 4 位 BCD 二进制对应项。为了有效地构建字符串,它遍历输入的十六进制字符串,为每个字符提取映射的二进制值,并将其附加到 StringBuilder。通过使用 StringBuilder 来构建最终的 BCD 表示,确保了性能优化。之后,将单个 BCD 字符串作为结果返回。

实施

输出

 
Therefore, the equivalent BCD is 001010100011