有没有办法在不使用Integer.toBinaryString
方法的情况下将int转换为二进制数?
我试图找出转换的算法,但没有任何运气。
我的任务是:(https://open.kattis.com/problems/reversebinary)
在Scanner的帮助下插入Int 将Int转换为二进制 反转二进制文件 打印出新的Int。
例如,数字11是二进制的1011
现在反转二进制数1011,你得到1101(这是数字13)
并打印出13。
这就是我所得到的,但我仍然使用Integer.toBinaryString
方法获得NumberFormatException
。
int reverse = 0;
int number, binary;
Scanner scn = new Scanner(System.in);
number = scn.nextInt();
String b = Integer.toString(number, 2);
binary = Integer.parseInt(b);
while (binary != 0) {
reverse = reverse * 10 + binary % 10;
binary = binary / 10;
}
int newNumber = Integer.parseInt(String.valueOf(reverse), 2);
System.out.println(newNumber);
}
}
答案 0 :(得分:3)
首先,您应该使用正确的术语。您没有将int转换为二进制文件。 int
类型(以及所有数字类型)已经以二进制格式存储。将int转换为String或将String转换为int时,可以选择String
表示使用的基数(例如十进制,二进制,八进制,十六进制等)。这确定了String表示中出现的数字。现在,根据您的示例,您要做的是生成一个数字,其二进制表示形式与输入数字相反。换句话说,您想要反转输入数字的位。
您当前的循环:
while (binary != 0) {
reverse = reverse * 10 + binary % 10;
binary = binary / 10;
}
计算binary
的十进制(基数10)数字并创建一个整数,其值是这些数字按相反顺序排列时的值。
如果你想要输入数字的二进制表示的反转,你应该乘以并除以2,以获得输入数字的二进制数字(也称为位)并反转它们:
while (number != 0) {
System.out.print (number % 2); // prints a binary digit (i.e. 0 or 1)
reverse = reverse * 2 + number % 2;
number = number / 2;
}
System.out.println();
System.out.println(reverse); // prints the decimal representation of the reversed number
如果number
为11
,reverse
将为13
,因为1011
的反面为1101
。此代码将打印反转数字(1101
)和十进制表示(13
)的二进制表示。
答案 1 :(得分:1)
不是将二进制数作为数字反转,而是在它仍为字符串new StringBuilder(b).reverse().toString()
时将其反转。然后将它从基数2转换回int,你就完成了。
所以整个代码都是:
final Scanner scn = new Scanner(System.in);
final int number = scn.nextInt();
String b = Integer.toString(number, 2);
b = new StringBuilder(b).reverse().toString();
System.out.println(Integer.parseInt(b.toString(), 2));
答案 2 :(得分:1)
对于这个问题,最聪明的解决方案是移位。我写了一个例子并做了一点解释。
int number, reverse = 0;
Scanner scn = new Scanner(System.in);
number = scn.nextInt();
while (number > 0)
{
// shift all bits to the left
reverse = reverse << 1;
// extract the last bit of the number
int bit = number & 1;
// add the last bit to the reverse version
reverse |= bit;
// shift alle bits to the right
number = number >> 1;
}
System.out.println(reverse);
答案 3 :(得分:1)
Integer.toBinaryString
- 返回整数参数的字符串表示形式,作为基数为2的无符号整数。
String toString(int i, int radix)
-
返回由第二个参数
public static void main(String[] args) {
int reverse = 0;
int number, binary;
Scanner scn = new Scanner(System.in);
number = scn.nextInt();
String b = Integer.toBinaryString(number);
binary = Integer.parseInt(b);
while (binary != 0) {
reverse = reverse * 10 + binary % 10;
binary = binary / 10;
}
int newNumber = Integer.parseInt(String.valueOf(reverse), 2);
System.out.println(newNumber);
}
事实上无论你使用什么都不能给出错误。上面的代码完美编译没有错误。
提供11,完美地给出了13。