476. Number Complement
Description
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.
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.
Solution
//题目意思即 将一个十进制int类型数按位取反,输出最后的结果(十进制)
//我的想法是从末位开始 与1异或运算 得到取反的最后结果,并循环累加,效率不是很高,代码如下:
class Solution {
public:
int findComplement(int num) {
int rnt = 0,i = 0;
while (num) {
rnt += (num ^ 1) % 2 * pow(2,i++);
num /= 2;
}
return rnt;
}
};
//在Solution里面 摘了一些不同的方法,以供参考,如下,侵删
class Solution {
public:
int findComplement(int num) {
unsigned mask = ~0;
while (num & mask) mask <<= 1;
return ~mask & ~num;
}
};
class Solution {
public:
int findComplement(int num) {
int x = floor(log2(num)) + 1;
return num^((1<<x)- 1);
}
};