1

我正在尝试一个我在这里找到的小谜题

我想知道我的答案为什么不正确,您会看到原始规范是

你的任务是编写一个程序来反转二进制数。例如,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));
    }
}

它正在执行上述任务,但在我提交时它是错误的。我想知道为什么它被认为是错误的?我错过了一些重要的事情吗?

4

4 回答 4

3

用一个整数输出一行,我们通过反转 N 的二进制表示得到的数字。(强调添加)

您正在输出Enter A Number:和整数。文字Enter A Number:\n11\n不等于文字11\n。如果他们使用自动化系统来检查程序,那么您的提交可能会因此而失败。

(除此之外,我没有检查过你的代码,所以可能还有其他问题——但那个问题会立即突出。)

于 2013-02-26T15:45:03.977 回答
0

如果您知道二进制数的最大大小(在您的示例中为 4 位)并且它是 8 位或更少,那么执行反转的最快方法是使用使用当前二进制值作为索引的查找表。例如,

// indices 0 - 3 of the lookup table.
byte[] lookUpTable =
{
  0b0000, 0b1000, 0b0100, 0b1100
}

// assuming a valid index.
byte reversed = lookUpTable[valueToReverse];
于 2013-02-26T15:46:35.453 回答
0
int result = Integer.reverse( value );
while((result & 1) == 0 && result != 0)
    result >>= 1;

编辑使用 AND 和 SHIFT 添加了位定位校正

公共静态int反向(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
于 2013-02-26T15:47:50.367 回答
0

查看我的解决方案:https ://github.com/nzpetter/reversebinary

在解决 Spotify 难题时,我学到了一件事。不要试图发明轮子。有人可能已经创建了您需要的方法。

public static int reversebinary(int s) {
    return Integer.parseInt(new StringBuilder(Integer.toBinaryString(s)).reverse().toString(), 2);
}
于 2013-02-27T21:16:49.427 回答