我正在尝试编写一个以(无符号)整数作为输入的函数,并返回该数字的二进制表示中等于1的位数。
示例:1234的二进制表示为10011010010,因此在这种情况下函数应返回5.
以下是我的回答:
var newArr;
var count = 0;
function countBits(num){
newArr = num.toString(2).split('').map(function(el){
if(el == '1')
count++
});;
return count;
}
在我的程序中,当我调用countBits(7)时,它返回// 3但是当我提交我的响应时,它表示它正在返回// 4。根据问题,有人可以在我的回复中看到我遗漏的内容吗?
答案 0 :(得分:3)
你的问题是你正在声明函数之外的变量,所以当多次调用函数时,它们会保留它们的值,只是增加计数。
顺便说一下,如果你不想创建另一个阵列,你也不应该使用map
- 所以做得更好
function countBits(num){
var newArr = num.toString(2).split('').map(Number);
var count = 0;
for (var i=0; i<newArr.length; i++)
count += newArr[i];
}
return count;
}
或
function countBits(num){
return num.toString(2).split('').reduce(function(count, el) {
return count + (el == "1");
}, 0);
}
答案 1 :(得分:0)
function countBits(num){
// convert num Base10 to Base2
let base2 = num.toString(2)
// declare variable for sum of bits
let sum = 0
// for loop to check bits (bit = 1) and ignore Zeros in the String base2
for(let i = 0; i < base2.length; i++){
if(base2[i] == 1){
// use Number() to convert string to number
count += Number(base2[i])
}
}
return sum ;
}
答案 2 :(得分:0)
function countBits(num){
/* Convert num Base10 to num Base2
then find Ones and save them in an array
length of the array is equal their sum */
return num.toString(2).match(/1/g).length
}