需要帮助编写代码,以便在不使用toString的情况下将十进制转换为二进制

时间:2015-03-31 23:33:50

标签: javascript binary decimal converter

我正在尝试使用递减输入变量(十进制值)的方法创建我自己的十进制到二进制转换器,将其除以2并存储余数(如二级数学余数),它始终为0或者1.我应该将每个剩余的值存储在一个数组中,我认为可能会向后放置,以便最重要的数字在数组中是第一位的(这是因为当从左到右填充剩余的剩余值时) 。 Soooo是的,我真的不知道如何使用函数将余数值存储在数组中 在此先感谢,如果有什么令人困惑的话,请随意提问,因为我甚至不确定这是否是最好的方法,这就是我想出来的

function decimalToBinary(num) {
  var bin = 0;
  while (num > 0) {
  bin = num % 2 + bin;
  num >>= 1; // basically /= 2 without remainder if any
  }
  alert("That decimal in binary is " + bin);
}

2 个答案:

答案 0 :(得分:0)

您的代码几乎是正确的。主要问题是bin0开头;当您添加数字时,它们会以数字形式添加,因此您的代码最终只计算二进制文件1:以这种方式,10是初始0+1+0+1+0 ,结果为2。您希望将其作为字符串处理:""+1+0+1+0会产生1010。因此,唯一需要的改变是:

var bin = "";

如果您想使用数组解决它,只需对代码进行最少的更改,它就是:

function decimalToBinary(num) {
  var bin = [];
  while (num > 0) {
  bin.unshift(num % 2);
  num >>= 1; // basically /= 2 without remainder if any
  }
  alert("That decimal in binary is " + bin.join(''));
}

在这里,我使用.unshift将一个元素添加到数组的头部(并重新编号其余的元素); .join()将它们全部收集到一个字符串中。

或者这个:

function decimalToBinary(num) {
  var bin = [];
  while (num > 0) {
  bin[bin.length] = num % 2;
  num >>= 1; // basically /= 2 without remainder if any
  }
  alert("That decimal in binary is " + bin.reverse().join(''));
}

这不是很好,但是说明了你可以用数组做的更多事情:取长度,设置一个任意元素,然后翻转它们。

答案 1 :(得分:0)

只需复制粘贴toBin方法,我便将其记为自定义方法。

function toBin(num) {
    let variable = 0;
    let power = 0;
    while(variable <= num) {
        power += 1;
        variable = Math.pow(2, power);

    }

    let result = '';
    let change = num;

    while(1 <= power) {
        let iterationsof2 = Math.pow(2, power)

        if(change - iterationsof2 >= 0) {
            change = change - iterationsof2;
            result += 1;
            power--;
            continue;
        }

        result += 0;
        power--;
    }

    return result
}




Test the toBin method with built-in toString(2)

toBin(100) === (100).toString(2) --> true
toBin(1) === (1).toString(2)     --> true
toBin(128) === (128).toString(2) --> true
相关问题