题目: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.
题解:题意是将一个数变成其二进制数,然后将其位为0变为1,位为1变为0,然后将其输出。例如5位101,变为010,则输出2,联想到010=111-101(异或也行).即可变为求任何数变为二进制数并将其位为0的全部变为1,有两种方法,一种是逐位or 1,或者是考虑111=1000-1,下面用代码体现。
代码1:
class Solution {
public:
int findComplement(int num) {
int i;
int c=num;
bool start=false;
for(i=31;i>=0;i--)
{
if(c&(1<<i)) start=true;
if(start) c=c|(1<<i);
}
return (c-num);
}
};
代码2:
class Solution {
public:
int findComplement(int num) {
int mask=1;
int c=num;
while(c){
c>>=1;
mask<<=1;
}
return ((mask-1)^num);
}
};