1. 程式人生 > >【LeetCode】數字的補數

【LeetCode】數字的補數

給定一個正整數,輸出它的補數。補數是對該數的二進位制表示取反。

注意:

  1. 給定的整數保證在32位帶符號整數的範圍內。
  2. 你可以假定二進位制數不包含前導零位。

示例 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;
    }
}

思路就是先將數轉化為二進位制串形式,然後求補,最後轉化為十進位制數