476. Number Complement
Example 1:
Input: 5 Output: 2 Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.
Example 2:
Input: 1 Output: 0 Explanation: The binary representation of 1 is 1 (no leading zero bits), and its complement is 0. So you need to output 0.
求一个数的补码。
public class Solution {
private int getPow(int x,int y){
int a=1;
for(int i=0;i<y;i++){
a*=x;
}
return a;
}
public int findComplement(int num) {
int sum=0;
if(num==0){
return 1;
}
if(num>0){
int i=0;
while(num!=0){
if(num%2==1){
i++;
}else{
sum=sum+getPow(2,i);
i++;
}
num/=2;
}
}
return sum;
}
}
另一种解法:
举个例子:
100110, 它的补码是 011001, 和是 111111. 所以我们先求和num的二进制长度相同全为一的数,然后做减法
public int findComplement(int num)
{
int i = 0;
int j = 0;
while (i < num)
{
i += Math.pow(2, j);
j++;
}
return i - num;
}