Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.
Note:
The given integer is guaranteed to fit within the range of a 32-bit signed integer.
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.
程序一:计算出每一位二进制翻转后的值,在将二进制转换成十进制
int findComplement(int num) {
int n = 0;//记录二进制位数
int count = 0;//翻转后的十进制数
while(num != 0)
{
int i = num % 2;
i = (i + 1) % 2;//0变成1,1变成0
count = count + i * pow(2,n);
num = num / 2;
n++;
}
return count;
}
程序二:通过对二进制进行移位来计算翻转后的十进制数
int findComplement(int num) {
unsigned mask = ~0;
while (num & mask) mask <<= 1;//向左移动一位,以0进行填充
return ~mask & ~num;
}
For example:
num = 00000101
mask = 11111000
~mask & ~num = 00000010