从无符号整数计数位

时间:2016-10-24 23:32:02

标签: javascript

我正在尝试编写一个以(无符号)整数作为输入的函数,并返回该数字的二进制表示中等于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。根据问题,有人可以在我的回复中看到我遗漏的内容吗?

3 个答案:

答案 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
}