先上题目
思路:补数如题所述,该数二进制取反。我尝试了一下直接整数异或发现不行。这里使用常规做法,取得一个整数,先将整数转换为二进制数(此处使用循环%2取余),得到二进制数的每一位的同时进行计算转换为整数。
注意:得到的第一个数是最低位的二进制数,逐个往高位走,所以我们可以增加一个计数变量,判断每次循环得到的数需乘以2的几次方。
代码部分:
int findComplement(int num) {
int i,temp=0,result=0,count=-1;
while(num){
i=0;
if(num==1){ //此处If-else可直接写成temp=num%2;
temp=num;
}else{
temp=num%2;
}
temp=!temp;
num=num/2;
count++;
while(i<count){
temp=temp*2;
i++;
}
result=result+temp;
}
return result;
}