以二进制表示计数1位数

时间:2016-11-12 18:49:08

标签: javascript html arrays

我尝试使用下面的代码将十进制输入转换为二进制表示,然后计算其中的1的数量

当我运行以下代码时,没有输出,也没有报告错误:

function demo() {
    var arra, i, rem;
    var Input = document.getElementById('demo');
    arra = [
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
    var x = 1;
    while (Input > 0) {
        rem = Input % 2;
        Input = (parseInt(Input / 2));
        if (rem > 0) {
            arra[i] = 1;
            i = i + 1;
        } else {
            i = i + 1;
        }
    }

    while (x < 35) {
        if (arra[x] == 1) {
            document.getElementById("output").innerHTML = "SOB Found";
            x = x + 1;
        } else {
            x = x + 1;
        }
    }
}

HTML代码:

<!doctype html>
<html>
  <head>
    <title>Test Phase</title>
    <script src="SOB.js" type="text/javascript"></script>
  </head>
  <body>
    <input type="text" name="value" id="Input"   />
    <input type="submit"  value="submit"   onClick="demo()"  />
    <p id="output"> </p>
    <script src="SOB.js" type="text/javascript"></script>
  </body>
</html>

3 个答案:

答案 0 :(得分:0)

您的代码存在一些问题。 var Input你拥有它的方式是一个DOM元素,它实际上并不存在(demo)在你的HTML中,你可能想做var Input = document.getElementById('Input').value; 接下来,您没有给i一个初始值,这使得第一个arra[i] undefined: 1(或当时的任何值Input。 第三,Array从索引0开始,因此var x应为0

要把它们放在一起,它应该是:

function demo() {
    var arra, i = 0, rem;
    //            ^ giving i initial value
    var Input = document.getElementById('Input').value;
    //                                   ^       ^
    arra = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
    var x = 0; // start index is 0
    while (Input > 0) {
        rem = Input % 2;
        Input = (parseInt(Input / 2));
        if (rem > 0) {
            arra[i] = 1;
            i = i + 1;
        } else {
            i = i + 1;
        }
    }

    while (x < 35) {
        if (arra[x] == 1) {
            document.getElementById("output").innerHTML = "SOB Found";
            x = x + 1;
        } else {
            x = x + 1;
        }
    }
}

fiddle

这很有效,虽然我不明白其含义是什么。

答案 1 :(得分:0)

您可以使用空数组,使用输入的隐式转换数字值,使用所有小写字母变量并计算数组中的所有1。然后用计数输出。

&#13;
&#13;
function demo() {
    var array = [], i = 0, rem,
        input = +document.getElementById('Input').value,
        count = 0;

    while (input > 0) {
        rem = input % 2;
        input = Math.floor(input / 2);
        array[i] = rem;
        i++;
    }

    for (i = 0; i < array.length; i++) {
        if (array[i] == 1) {
            count++;
        }
    }
    document.getElementById("output").innerHTML = count + ' found of 1.';
    console.log(array);
}
&#13;
<input type="text" name="value" id="Input"   />
<input type="submit"  value="submit"   onClick="demo()"  />
<p id="output"></p>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

有几个问题,但您可以使用.toString(2)方法以更少的代码执行此操作:

function demo() {
    // Get input value via value property and convert to number (+)
    var val = +document.getElementById("input").value;
    // Convert to binary representation:
    var bin = val.toString(2);
    // Count the number of 1 bits, by counting the number of 
    //    matches when looking for 1s:
    var ones = bin.match(/1/g).length;
    // Output results, using textContent, not innerHTML:
    document.getElementById("binary").textContent = bin;
    document.getElementById("ones").textContent = ones;
}
<input type="text" name="value" id="input">
<input type="submit"  value="submit" onclick="demo()">
<p>
Binary: <span id="binary"></span><br>
One bits: <span id="ones"></span>
</p>