Java-将小数转换为任何其他数字系统的算法是什么

时间:2019-01-31 08:45:23

标签: java

我正在尝试找到一种算法,可以将任何正十进制数字(整数)转换为任何其他数字系统。 我似乎无法理解它。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:-1)

您实际上可以为此使用%(模)-运算符: 假设您获得了十进制数字123,并想将其转换为二进制, 您将对所需系统的“等级”进行123模(在这种情况下为二进制-> 2)

123 % 2 -> equals to 1

之后,将123除以相同的“等级”并将结果取底:

123/2 = 61.5 -> 61

然后对除法结果重复该过程

61 % 2 -> 1
61/2 = 30.5 -> 30
30 % 2 -> 1
30/2 = 15 -> 15

以此类推

在重复这些步骤的同时,获取每次模运算的结果, 并向后写入(这意味着最后的结果将是最左边的数字,第一个结果是最右边的数字) 重复这些步骤,直到除以零为止。 让我们结束这个例子:

123 % 2 = 1 (1. digit from the right)
123/2 = 61.5 -> 61

61 % 2 = 1 (2. digit)
61/2 = 30.5 -> 30

30 % 2 = 0 (3. digit)
30/2 = 15

15 % 2 = 1 (4. digit)
15 / 2 = 7.5 -> 7

7 % 2 = 1 (5. digit)
7 / 2 = 3.5 -> 3

3 % 2 = 1 (6. digit)
3 / 2 = 1.5 -> 1
1 % 2 = 1 (7. digit)
1 / 2 = 0 <- reached zero, ending here

所得的123的二进制数为 1111011

如果要将123转换为十六进制,则将对16做模,然后除以16而不是2

现在在Java中,我将执行以下操作:

public static void main(String[] args) {
    System.out.println(convertFromDec(123, 2)); //converting to binary
    System.out.println(convertFromDec(123, 8)); //converting to octal
    System.out.println(convertFromDec(123, 16)); //converting to hex
}

public static String convertFromDec(int number, int system) {
    String result = "";
    while(number > 0) {
        String digit = ""; //in case of number systems of "rank" 11 or higher
        switch(number%system) { //we would have letters from A to F as additional digits
            case 10 : digit = "A";
            case 11 : digit = "B";
            case 12 : digit = "C";
            case 13 : digit = "D";
            case 14 : digit = "E";
            case 15 : digit = "F";
            default : digit = number%system + "";
        }
        result += digit;
        number /= system;
    }
    return result;
}

(假设这是您的家庭作业,而无需使用Integer.toString)