【问题标题】:Need help writing code to convert decimal to binary without the use of the toString需要帮助编写代码以在不使用 toString 的情况下将十进制转换为二进制
【发布时间】:2015-06-05 11:34:56
【问题描述】:

我正在尝试使用递减输入变量(十进制值)的方法创建自己的十进制到二进制转换器,方法是将其除以 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);
}

【问题讨论】:

  • 算法似乎是正确的。向我们展示您对代码的尝试。
  • 我刚刚在 Java 中使用LinkedList<Integer>addFirst() 来处理每个二进制数字。
  • 阿马丹,我没有任何代码,但这实际上是我需要帮助的,但我会尝试一下 rn
  • 所以我没有使用数组,而是尝试了上述方法,因为我真的不知道如何将值存储到数组中
  • @Amadan 抱歉忘记给你加标签

标签: javascript binary decimal converter


【解决方案1】:

您的代码几乎是正确的。主要问题是bin0 开头;当您添加一个数字时,它们以数字形式添加,因此您的代码最终只计算二进制 1s:在这种方式下,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(''));
}

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

【讨论】:

  • 非常感谢我不熟悉第一组代码,但第二组对我来说很有意义
【解决方案2】:

我已经编写了一个自定义的十进制转二进制方法:

function toBinary (input) {
  let options = [1];
  let max = 0;
  let i = 1;

  while(i) {
    max = Math.pow(2, i);
    if (max > input) break;

    options.push(max);
    i++;
  }

  let j = options.length;
  let result = new Array(j);
  result.fill("0");
  while(j >= 0) {
    if (options[j] <= input) {
      result[j] = "1"
      input = input - options[j];
    }
    j--;
  }
  return [...result].reverse().join("");
}




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

toBinary(100) === (100).toString(2) // true
toBinary(1) === (1).toString(2)     // true
toBinary(128) === (128).toString(2) // true

【讨论】:

    猜你喜欢
    • 2015-05-02
    • 1970-01-01
    • 2010-12-05
    • 2020-04-03
    • 2021-12-27
    • 2017-02-04
    • 2014-05-26
    • 1970-01-01
    相关资源
    最近更新 更多