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