【LeetCode】數字的補數
阿新 • • 發佈:2018-12-09
給定一個正整數,輸出它的補數。補數是對該數的二進位制表示取反。
注意:
- 給定的整數保證在32位帶符號整數的範圍內。
- 你可以假定二進位制數不包含前導零位。
示例 1:
輸入: 5 輸出: 2 解釋: 5的二進位制表示為101(沒有前導零位),其補數為010。所以你需要輸出2。
示例 2:
輸入: 1 輸出: 0 解釋: 1的二進位制表示為1(沒有前導零位),其補數為0。所以你需要輸出0。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); System.out.println(Solution.findComplement(n)); } } class Solution { public static int findComplement(int num) { String binStr=""; //儲存二進位制串形式 while (num!=0) //轉換為二進位制串 { binStr=num%2+binStr; num/=2; } StringBuffer sb=new StringBuffer(); //儲存求補後的二進位制串 for (int i=0;i<binStr.length();i++) if (binStr.charAt(i)=='0') sb.append('1'); else sb.append('0'); int reu=0; //記錄結果 for (int i=0;i<sb.length();i++) //各位按權相加算出結果 if (sb.charAt(i)=='1') reu+=1*Math.pow(2,binStr.length()-1-i); return reu; } }
思路就是先將數轉化為二進位制串形式,然後求補,最後轉化為十進位制數