反转的二进制数

时间:2013-02-26 15:38:10

标签: java binary

我正在尝试一个小谜题,我发现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));
    }
}

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

4 个答案:

答案 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);
}