[英]Node JS function that takes an unsigned integer and returns wrong number of '1' bits
[英]Writing a function that takes an integer as input, and returns number of bits to binary
我正在进行代码战争练习,但它不接受我的解决方案,并引发类型错误:无法读取 null 的属性“长度”。 我在单独的 Chrome 窗口上检查了我的代码,它运行良好。 当使用任何整数调用该函数时,我会从二进制数中获取所有 1。 我究竟做错了什么?
var countBits = function(n) {
var result = n.toString(2).match(/1/g).length;
return result;
};
如果在函数中输入的字符不匹配,则应添加条件以检查空值。
var result = n.toString(2).match(/1/g) != null ? n.toString(2).match(/1/g).length : 0;
var countBits = function(n) { var result = n.toString(2).match(/1/g) != null ? n.toString(2).match(/1/g).length : 0; return result; }; console.log(countBits('a'))
虽然将数字转换为字符串并使用正则表达式进行计数没有任何问题,但您也可以通过简单的数学运算来完成——只需连续除以 2 并查看数字 mod 2,直到将其减少为零。
var countBits = function(n) { let s = 0; while (n > 0){ s += n % 2 n = Math.floor(n/2) } return s }; console.log(countBits(0)) console.log(countBits(2)) console.log(countBits(3)) console.log(countBits(1234))
如果字符串与您的正则表达式不匹配,这将返回错误。 做这样的事情。
var countBits = function(n) {
var result = n.toString(2).match(/1/g);
if (result){
return result.length;
}
return 0;
};
如果没有 1 ( 0
), match
将返回null
。 您可以改用filter
:
const countBits = n => [...n.toString(2)].filter(e => e === "1").length;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.