我正在进行代码大战练习,并且它不接受我的解决方案,并引发类型错误:无法读取null的“长度”属性。我在一个单独的Chrome窗口中检查了代码,效果很好。当用任何整数调用函数时,我从二进制数中得到所有的1。我究竟做错了什么?

var countBits = function(n) {
  var result = n.toString(2).match(/1/g).length;
  return result;
};

最佳答案

尽管将数字转换为字符串并使用正则表达式进行计数没有什么问题,但是您也可以使用简单的数学运算来实现—只需将其连续除以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))

09-26 22:05