您的位置:首页 > 其它

第三周作业:位运算

2017-03-10 11:34 281 查看
题目: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);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: