使用Javascript除以2直到我达到1

时间:2015-01-25 00:46:44

标签: javascript math counter division floor

我正在尝试使用一个名为value的参数并创建一个将其除以2然后递增计数器的函数。当值达到1时,我想返回计数器,显示在达到1之前,值被除以2的次数。到目前为止,我有

var count = 0;

function binary_seq(value) {
    while(value > 1) {
    Math.floor(value/2);
    count++;
    if (value == 1) {
        return count;
    }
    }
}

4 个答案:

答案 0 :(得分:2)

我不知道为什么要在javascript中计算基数为2的对数。也许它是挑战或家庭作业的一部分,但有人必须成为提及标准&解决这个问题的简单方法,今天有人就是我。

Math.ceil(Math.log2(n)+1);

答案 1 :(得分:1)

function binary_seq(value) {
    var count = 0;
    while(value >= 1) {
        value /= 2;
        count++;
    }
    return count;
}

答案 2 :(得分:1)

这应该可以解决问题。



function binary_seq(value) {
    var count = 0;
    while(value > 1) {
        value = Math.floor(value/2); // Update the value of `value`
        count++;
    }
    return count; // Return the value of count
}

document.write(binary_seq(1024))




此外,您无需在功能范围之外定义count

答案 3 :(得分:0)

4年后的2019年7月,我正在回答,我知道它写得有点长,因为我还没有正确学习ES6,所以现在检查一下=>

let input = document.getElementById("decimal");
let ans = document.getElementById("answer");
let btn = document.getElementById("get");
let tryagian = document.getElementById("tryagain");

btn.onclick = function(){
    let inVal = input.value;
    if(inVal !== ``){
        let x = inVal;
        let arreyOfNumns = [];
        while (x >= 1) {
            let nums = (Math.ceil(x % 2));
            arreyOfNumns.push(nums);
           ;
           x = Math.floor(x/2);
        }  
    let ansfinall = arreyOfNumns.reverse().join("");
    ans.innerHTML = `${inVal} in binary is ${ansfinall}`;
    }
}

tryagian.onclick = function(){
    input.value = ``;
    ans.innerHTML = ``;
}
 <input type="number" id="decimal">
    <button id ="get">Find Out</button>
    <button id ="tryagain">Try again</button>
    <p id="answer"></p>