问题描述
给定一个正整数,输出其补数。补数是指将该数字的二进制表示逐位取反,然后转换回十进制得到的新数。
注意事项
- 给定的整数保证在32位有符号整数的范围内。
- 假设一个正整数的二进制表示不包含前导零。
示例
示例1: 输入: 5 输出: 2 说明: 5的二进制表示为101(不包含前导零),其补数为010,因此输出2。 示例2: 输入: 1 输出: 0 说明: 1的二进制表示为1(不包含前导零),其补数为0,因此输出0。
解决方案
补数是二进制中的一种概念,可以通过以下步骤实现:
- 将给定的整数转换为二进制字符串。
- 逐位取反,即将'0'变为'1',将'1'变为'0'。
- 将取反后的二进制字符串转换回十进制整数。
具体实现如下:
function findComplement(num) { return parseInt(num.toString(2).split('').map(bit => bit === '0' ? '1' : '0').join(''), 2); }
运行结果