我正在尝试一个小谜题,我发现here
我想知道我的答案是怎么回事,你看原来的规范是
您的任务是编写一个用于反转二进制数字的程序。 例如,13的二进制表示是1101,并且是反转的 它给出1011,对应于11号。
所以这是我的代码..
import java.util.Scanner;
public class ReverseBinary {
public String reversedIntToBinary(int val) {
int value = val;
StringBuilder bldr = new StringBuilder();
while (value != 0) {
int remainder = value % 2;
value = value / 2;
bldr.append(remainder);
}
return bldr.toString();
}
public int toDecimal(String bin) {
char[] binString = bin.toCharArray();
int starting = 0;
for (int i = 0; i < binString.length; i++) {
int tempoVal = starting * 2
+ Character.getNumericValue(binString[i]);
starting = tempoVal;
}
return starting;
}
public int reversedBinary(int val){
String bin =reversedIntToBinary(val);
int result = toDecimal(bin);
return result;
}
public static void main(String[] args) {
ReverseBinary rvb = new ReverseBinary();
Scanner input = new Scanner( System.in);
System.out.println("Enter A Number: ");
int num = input.nextInt();
System.out.println(rvb.reversedBinary(num));
}
}
它正在执行上述任务,但在我提交时它是错误的。我想知道为什么它被认为是错的?我错过了一些关键的东西吗?
答案 0 :(得分:3)
输出一行一个整数,我们通过反转N的二进制表示得到的数字。 (重点补充)
您正在输出两条行,Enter A Number:
和整数。文字Enter A Number:\n11\n
不等于文字11\n
。如果他们使用自动系统检查程序,可能因为这个原因而无法提交。
(我没有检查过你的代码,所以可能还有其他问题 - 但是那个问题很快就会突出。)
答案 1 :(得分:0)
如果您知道二进制数的最大大小(在您的示例中为4位)并且它是8位或更少,那么执行反转的最快方法是使用当前二进制值作为索引的查找表。 例如,
// indices 0 - 3 of the lookup table.
byte[] lookUpTable =
{
0b0000, 0b1000, 0b0100, 0b1100
}
// assuming a valid index.
byte reversed = lookUpTable[valueToReverse];
答案 2 :(得分:0)
int result = Integer.reverse( value );
while((result & 1) == 0 && result != 0)
result >>= 1;
编辑使用AND和SHIFT
添加了一点位置校正public static int reverse(int i)
Returns the value obtained by reversing the order of the bits in the two's complement binary representation of the specified int value. Returns: the value obtained by reversing order of the bits in the specified int value. Since: 1.5
答案 3 :(得分:0)
查看我的解决方案:https://github.com/nzpetter/reversebinary
解决Spotify难题时,我学到了一件事。不要试图发明轮子。有人可能已经创建了你需要的方法。
public static int reversebinary(int s) {
return Integer.parseInt(new StringBuilder(Integer.toBinaryString(s)).reverse().toString(), 2);
}