Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.
输入一个正整数,求其转为二进制之后的每位都取反的值(十进制)。没有符号位。
例如:输入的正整数为5,其二进制为101,取反为010,010转为十进制是2,所要的输出结果就是2。
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.
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.
This question is the same as 1009: https://leetcode.com/problems/complement-of-base-10-integer/
int findComplement(int num){
int i=0,j=0,n=0,a[32]; //n为最终要输出的值,a[32]为储存2进制的数组;
for(i=0;num>0;i++){ //10进制转2进制
a[i]=num%2;
num=num/2;
};
//此时i的值等于转换好的2进制数的位数+1;
for(j=i-1;j>=0;j--){ //2进制每位取反
if(a[j]==0){
a[j]=1;
}else{
a[j]=0;
}
}
for(i--;i>=0;i--){ //2进制转10进制
n=n+a[i]*pow(2,i);
}
return n;
}