【问题标题】:Converting a base 10 number to other bases 2 without built in Javascript functions在没有内置 Javascript 函数的情况下将基数 10 转换为其他基数 2
【发布时间】:2016-04-13 00:09:40
【问题描述】:

我是编码和 javascript 的新手,有人要求我在不使用特定 Javascript 内置方法(如 alert(a.toString(16)))的情况下将基数为 10 的数字转换为二进制基数,而我是只允许使用循环、数组和函数。这是我到目前为止所拥有的:

var number = prompt("Enter an unsigned base 10 number");
    if (number>=0) {
        var base = prompt("Enter b for binary, o for octal, or h for hexadecimal");

        if (base=="h"||base=="H") {
            ;
        }

如您所见,我没有太多工作要做。我很好奇我将使用什么方程式或公式来转换以 10 为基数的数字,以及我应该如何显示 A=10、B=11、C=12 等十六进制基数。任何帮助将不胜感激!

【问题讨论】:

  • 您需要转换为二进制(基于 2)还是十六进制(基于 16)?
  • 对所有三个,二进制,十六进制和八进制。根据用户选择转换到的基数,代码将针对该特定基数运行。
  • 您似乎在追求某种算法(例如Change a number from base 10 to any other base)。一旦你发现了,你应该尝试对其进行编程。这就是这个网站的目的。
  • 提示:使用除以 2 的余数将数字转换为二进制;你需要一个循环。余数(模数),在 Javascript 中是 % 运算符。我不会给你更多,因为这应该是一个任务,你应该自己解决。
  • 谢谢你们!这真的很有帮助

标签: javascript arrays function loops for-loop


【解决方案1】:

编辑: 这是一种相当复杂的方法, 正如 Alnitak 向我展示的那样(参见下面的讨论)。 它更像是一种涂鸦,或者是步行的漫长道路。

简短说明:

如果我们想得到十进制数10的二进制, 我们必须尝试2^n 使2^n 仍然小于 10。 例如2^3 = 8(没关系)。但是2^4 = 16(太大了)。 所以我们有 2^3 并将 1 存储在索引 3 的数组中。

现在我们必须得到 10-2^3 的其余部分,即 2,并且必须 再次进行相同的计算,直到我们得到零差。

最后我们必须反转数组,因为它是相反的。

var a = prompt("Enter an unsigned base 10 number");
var arr = [];
var i = 0;

function decToBin(x) {
  y = Math.pow(2, i);
  if (y < x) {
    arr[i] = 0;
    i++;
    decToBin(x);
  }  else if (y > x) {
    i--;
    newX = (x - Math.pow(2, i));
    arr[i] = 1;
    i = 0;
    decToBin(newX)
  } else if (y == x) {
    arr[i] = 1;
    result = arr.reverse().join(); 
  }
  return result;
}

var b = decToBin(a); // var b holds the result

document.write(b);

【讨论】:

  • 这看起来不必要的复杂 - 我的版本是 function decToBin(x) { return (x ? decToBin(Math.floor(x / 2)) : '') + (x % 2) }(需要注意的是,这总是添加前导零)
  • 如果数字被限制在 0 .. 2^31 - 1 范围内,Math.floor(x / 2) 可以替换为 x &gt;&gt;&gt; 1
  • @Alnitak 谢谢你的好建议。你是一个更好的编码器。我还在学习很多东西。但我会尽我所能提供帮助。其实我是设计师。
  • @Alnitak 如果您能解释一下您的代码,那就太好了。我能够准确地理解它。二进制字符串是如何存储的?
  • 从算法上讲,这只是简单的“最低有效位优先”算法。如果数字是偶数,则输出 0,否则输出 1,然后将数字除以 2,重复,直到没有剩余。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-27
  • 1970-01-01
  • 2016-01-13
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多