Convert From Any Base to Decimal and Vice Versa in Java

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

计算给定数字及其底数的十进制表示。数字 0 到 9 和 A 到 Z 可以用作数字的底数。A 的值是 10,B 的值是 11,依此类推。可以通过实现一个函数将数字转换为十进制。

示例 1

输入

输出

The equivalent value is 485

解释

以下公式用于将八进制数 745 转换为十进制:(7 * 8^2) + (4 * 8^1) + (5 * 8^0) = 448 + 32 + 5 = 485

示例 2

输入

输出

The equivalent value is 11

解释

以下公式用于将 二进制 数 1011 转换为十进制:(1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (1 * 2^0) = 8 + 0 + 2 + 1 = 11。

示例 3

输入

输出

The equivalent value is 675

解释

以下公式用于将十六进制数 2A3 转换为十进制:(2 × 16^2) + (A × 16^1) + (3 × 16^0) = 512 + 160 + 3 = 675,其中 'A' 在十六进制中代表 10。因此,十六进制的 2A3 在十进制中是 675。

示例 4

输入

输出

The equivalent value is 10010.

解释

将 18 转换为二进制,通过不断除以 2 并记录余数

18 ÷ 2 = 9 余 0

9 ÷ 2 = 4 余 1

4 ÷ 2 = 2 余 0

2 ÷ 2 = 1 余 0

1 ÷ 2 = 0 余 1

从下往上读,二进制数为 10010。

示例 5

输入

输出

The equivalent value is FF.

解释

255 的十六进制表示为 FF,可以通过反复除以 16 并取余数得到:255 ÷ 16 = 15 (F) 余 15 (F)。因此,值为 FF。

方法:朴素

可以使用代码中定义的 函数 将字符转换为其等效的整数值,并使用 toDeci 函数进行从底数到十进制的转换。通过更改其 ASCII 值,value 函数可以处理字母字符和数字。toDeci 函数在从右到左遍历 字符串 时,会将每个字符的值乘以底数的相应幂。会检查无效数字(超出底数的数字),如果找到,则返回错误。

实施

文件名: baseTodecimal.java

输出

 
The Decimal equivalent of the 2A3 with the base 16 is given as 675

复杂度分析

上述代码的时间复杂度为 O(N),其中“N”代表字符串的长度,空间复杂度为 O(1)。

如何做反向转换?

方法:朴素

该代码实现了一个从十进制到任意底数的转换方案。revValue 方法支持数字和字母数字(最高到 36 进制),可以确定整数值的字符表示。为了创建正确的底数表示,fromDecimal 方法计算余数,将其转换为字符,然后反转生成序列。

实施

文件名: DecimalConversion.java

输出

 
The Equivalent of the 282 with the base 16 is 11A

复杂度分析

时间复杂度为 O(logbasen),其中“n”是输入数字,“base”表示要转换到的底数,空间复杂度为 O(logbasen)。

方法:使用 Integer.parseInt()

如代码所示,Integer.parseInt(String s, int radix) 方法 将给定底数(基数)的数字的字符串表示形式转换为其十进制整数等效值。

实施

文件名: IntFunctionMethod.java

输出

 
The equivalent value is 12

下一主题Vert.x Java