476. Number Complement(补数)

Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.

Note:

  1. The given integer is guaranteed to fit within the range of a 32-bit signed integer.
  2. You could assume no leading zero bit in the integer’s binary representation.

    Example 1:

    Input: 5
    Output: 2
    Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.
    

    Example 2:

    Input: 1
    Output: 0
    Explanation: The binary representation of 1 is 1 (no leading zero bits), and its complement is 0. So you need to output 0.
  3. 思路:给定一个正整数,输出它的补数。补数的策略是通过翻转二进位表示。
  4. 1.求出该数的二进制位数; 
    2.通过给定数num和相同位数的二进制数(全为1)进行异或,即可求出补数。
  5.  public int findComplement(int num) {
                
                int ans = 0;//the count of the num's bits
                int temp = num;//copy of the num
                while(temp != 0){
                    ans++;
                    temp /= 2;
                }
                return num ^ (int)(Math.pow(2,ans)-1); 
        }

    pow() 函数用来求 x 的 y 次幂(次方),其原型为:
             double pow(double x, double y);

原文地址:https://www.cnblogs.com/sunli0205/p/6422642.html