很简单的整数求反码(做这么简单的题真能通过机试吗)题目。主要是位运算的简单运用,题目里推荐用flip函数,但是第一遍手撸也还行,自己代码如下:
class Solution {
public:
int findComplement(int num) {
int n=0,cp,ans;
cp=num;
int m=1;
while(cp!=0){
cp=cp/2;m=m*2;
}
ans=m-1-num;
return ans;
}
};
位运算版标程如下:
class Solution {
public:
int findComplement(int num) {
unsigned mask = ~0;
while (num & mask) mask <<= 1;
return ~mask & ~num;
}
};
flip函数,是要按位取反,包括头部的0,所以要添加去除首位1的部分,标程如下(感觉有点强行flip还不如直接位运算方便):
class Solution {
public:
int findComplement(int num) {
bitset<32> i(num);
int j=31;
for(;j>0;--j){
if(i[j]!=0)
break;
}
for(;j>=0;j--){
i.flip(j);
}
int r=i.to_ulong();
return r;
}
};
比赛的482和最后一题480没做,晚上回来看看再出。顺便吐槽:小比赛都玩的这么尴尬,我也很为机试捉急啊(慌)...