【问题标题】:Using Javascript to divide by 2 until i reach 1使用 Javascript 除以 2 直到达到 1
【发布时间】:2015-01-25 00:46:44
【问题描述】:

我正在尝试获取一个名为 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;
    }
    }
}

【问题讨论】:

  • 您应该将 Math.floor 的结果存储在某处;)通过返回“count”,您将返回字符串“count”而不是变量
  • 是的,您已经有效地创建了while true

标签: javascript math counter division floor


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    这应该可以解决问题。

    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】:
      function binary_seq(value) {
          var count = 0;
          while(value >= 1) {
              value /= 2;
              count++;
          }
          return count;
      }
      

      【讨论】:

      • 您应该将 Math.floor 的结果存储在值中,否则 while 循环将不起作用
      • 您除以错误的数字。 /= 应该只是 =。如果 value 最初是 6,那么您最终会得到 value = value / Math.floor(6/2),它应该是 value = 2,而它应该是 value = 3
      • 你们知道你们能做什么吗?你可以去吸......等等等等......你实际上可以编辑我的答案并提出建议并做一些有建设性的事情。它可以帮助我和最终用户。很多时候,我忙于项目工作,同时尽我所能帮助他人。如果您有更好的答案,您肯定可以发布它。但我怀疑你会想感受你给别人的热度。
      【解决方案4】:

      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>

      【讨论】:

        猜你喜欢
        • 2013-02-13
        • 1970-01-01
        • 2017-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-02
        • 1970-01-01
        相关资源
        最近更新 更多