Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.
Example
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.
解题思路1:
直观思路:先将十进制转为二进制,再依次取反,最后转换回十进制。
#include<bitset>
class Solution {
public:
/**
* @param num: an integer
* @return: the complement number
*/
int findComplement(int num)
{
// Write your code here
vector<bool> bit;
//十进制转二进制存入bit中
while(num)
{
bit.push_back(num%2);
num /= 2;
}
//依次按位取反
for(int i=0;i<bit.size();i++)
bit[i] = !bit[i];
//二进制转换十进制
int result=0;
for(int i=0,k=1;i<bit.size();i++,k=k*2)
result += bit[i]*k;
return result;
}
};
解题思路2:
使用bitset类减少造轮子,因为如果不满的话,bitset会填满0,所以需要找到第一个1出现的地方,然后从这里开始翻转。
#include<bitset>
class Solution {
public:
/**
* @param num: an integer
* @return: the complement number
*/
int findComplement(int num)
{
// Write your code here
bitset<32> bit(num);
for(int i=31;i>=0;i--)
{
if(bit[i]==1)
{
for(int j=i;j>=0;j--)
bit[j] = !bit[j];
break;
}
}
return bit.to_ulong();
}
};