理解一下题意,大概就是对该数的二进制值进行取反,但是与取反运算不同的是(5的二进制为00000101,取反会是11111010,而想得到的是00000010)。所以我想用异或运算来求解。sum是求一个二进制为1,并且比该数大的值。比如5的二进制是00000101,我要求的是00000111,即6,然后取异或,得到00000010,即2)
java代码是:(13ms,感觉不知道该怎么提高了。。)
public int findComplement(int num) {
int sum=1;
int i=1;
while(sum<num){
i = i*2;
sum = sum+i;
}
int s = sum^num;
return s;
}