1、题目如下:
给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。
注意:
给定的整数保证在32位带符号整数的范围内。
你可以假定二进制数不包含前导零位。
示例 1:
输入: 5
输出: 2
解释: 5的二进制表示为101(没有前导零位),其补数为010。所以你需要输出2。
示例 2:
输入: 1
输出: 0
解释: 1的二进制表示为1(没有前导零位),其补数为0。所以你需要输出0。
2、解题思路如下:
通过~取反得到当前数的反数,又因为题目要求不要前导数,通过该数&(Integer.highestOneBit(num)-1)可解决前导数的问题。
3、代码如下:
class Solution {
public int findComplement(int num) {
return (~num&(Integer.highestOneBit(num)-1));
}
}
public class MainClass {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = in.readLine()) != null) {
int num = Integer.parseInt(line);
int ret = new Solution().findComplement(num);
String out = String.valueOf(ret);
System.out.print(out);
}
}
}
4、运行结果如下:
image.png
网友评论