1. 程式人生 > >LeetCode:190:Reverse Bits(Java)

LeetCode:190:Reverse Bits(Java)

將32位無符號整數的二進位制碼的反轉數再轉化為對應的十進位制數。

根據例子知道:輸入43261596, 它先被表示為二進位制形式10100101000001111010011100,因為是32位,所以要用0補全剩餘位,也就變成了00000010100101000001111010011100. 之後將其反轉為00111001011110000010100101000000,最後轉化為對應十進位制數即964176192.

由於Java有很多自帶的進位制轉換方法:

十進位制轉二,八,十六進位制:

public static String Integer.toBinaryString (int i) :將10進位制數int i 轉化為二進位制數並輸出String

public static String

Integer.toOctalString (int i) :將10進位制數int i 轉化為八進位制數並輸出String

public static String Integer.toHexString (int i) :將10進位制數int i 轉化為十六進位制數並輸出String

二,八,十六進位制轉十進位制:

String s 為要被轉化的String,int radix 為s的進位制數。

然而這種方法不適用於32位的二進位制碼,會throw NumberFormatException,而且按照一般思路一步一步轉化也太複雜了,要轉化好多次。

我是想,一般我們最早學的十進位制轉二進位制方法就是“除2倒取餘法”, 這裡正好還要把二進位制碼再倒回來,所以不妨直接“除2正取餘”,再在尾部用0補到第32位就好了。這部分程式碼如下:

這樣就直接得到了二進位制的反轉數的字串String r。 

不過接下來還是避不開十進位制的轉化,最後發現可以用java.math.BigInteger的包,把要轉化後的數定義為BigInteger,用它的constructor  來定義(val 是用於轉換的字串,如上面的String r;radix為val的進位制數)。這種方法可適用於所有的二進位制轉化~

程式碼如下:

執行結果: