题目描述:
对整数的二进制表示取反(0 变 1 ,1 变 0)后,再转换为十进制表示,可以得到这个整数的补数。
例如,整数 5 的二进制表示是 “101” ,取反后得到 “010” ,再转回十进制表示得到补数 2 。
给你一个整数 num ,输出它的补数。
示例1:
输入:num = 5
输出:2
解释:5 的二进制表示为 101(没有前导零位),其补数为 010。所以你需要输出 2 。
示例2:
输入:num = 1
输出:0
解释:1 的二进制表示为 1(没有前导零位),其补数为 0。所以你需要输出 0 。
提示:
1 <= num < 231
代码:
class Solution {
public:
int findComplement(int num) {
int a=0,i=0,num2=0;
while(num!=0){ //得到二进制的每一位
a=(num%2+1)%2; //num%2是二进制的每一位,((num%2)+1)%2取反
num=num/2;
num2=num2+a*pow(2,i); //转为10进制
i++;
}
return num2;
}
};
注意:
补数:10进制数的2进制按位取反得到补数。