第三周作业:位运算
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:
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); } };
相关文章推荐
- 第二次作业: 四则运算的实现
- 第三周周一作业
- 第三周作业
- Coursera—machine learning(Andrew Ng)第三周编程作业
- 第三周课上作业 小学生计算能力
- 第三周作业(二)
- 吴恩达深度学习第三周作业(Planar data classification with one hidden layer)
- 第三周作业1
- 软件工程作业 四则运算总结
- 第三周作业二
- 第三周作业(一)单元测试
- 第三周作业
- 第三周-项目一(1)顺序表的基本运算
- 第三周项目1 - 顺序表的基本运算(2)
- 作业——在线学习Android课程之第三周
- 【作业报告】20150407 作业2 结对 四则运算
- 第三周作业分数
- 第三周项目一 顺序表的基本运算
- 第三周作业:程序模块开发遇到的问题及部分解决办法
- 《二维数组的一种加法运算——JAVA第三周》