小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
说明:文章部分内容及图片出自网络,如有侵权请与我本人联系(主页有公众号:小攻城狮学前端)
作者:小只前端攻城狮、 主页:小只前端攻城狮的主页、 来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目描述
给你一个 正 整数 num ,输出它的补数。补数是对该数的二进制表示取反。
示例1 :
输入:num = 5
输出:2
解释:5 的二进制表示为 101(没有前导零位),其补数为 010。所以你需要输出 2 。
示例2 :
输入:num = 1
输出:0
解释:1 的二进制表示为 1(没有前导零位),其补数为 0。所以你需要输出 0 。
思路1:二进制
- 将参数转化成2进制字符串
- 定义中间变量接受结果
- for循环遍历字符串,将其每个元素取反后加入j中
- 将字符串j转化成10进制返回
const findComplement = num => {
// 计算num二进制数的长度
const len = num.toString(2).length;
// 构造长度为len、全为1的字符串
const str = new Array(len).fill(1).join('');
// 转化为二进制数
const N = parseInt(str, 2);
return N ^ num;
};
思路2:二进制+十进制
分析:二进制十进制互转,与1异或取反即可
var findComplement = function (num) {
// 转二进制
var binary = num.toString(2);
var complement = '';
// 取反
for (i = 0, len = binary.length; i < len; i++) {
complement += binary[i] ^ 1;
}
// 转十进制
return parseInt(complement, 2);
};
感谢阅读,希望能对你有所帮助,文章若有错误或者侵权,可以在评论区留言或在我的主页添加公众号联系我。
写作不易,如果觉得不错,可以「点赞」+「评论」 谢谢支持❤