javascript - 神秘2 出现在我的JavaScript 十进制到二进制转换器的输出中?

标签 javascript algorithm recursion binary decimal

我正在尝试使用以下递归函数实现一个相当简单的十进制到二进制转换器:

function dectobin(d) {
            if (0 >= d) { return 0; }
            else if (1 == d) { return 1; }
            else {
                return 10 * dectobin(Math.floor(d / 2)) + (d % 2);
            }
        }

现在的问题是,当我用 70007 测试它时,当最后一个条目从堆栈中弹出时,最后一次递归时似乎出现了 1 的溢出。因此,一旦 dectobin(35003) 返回 100010001011101,它就会按 10 缩放到 1000100010111010,并且假定添加 1。除了,它不是加 1,而是加 2,所以答案变成:1000100010111012。现在我检查了我的逻辑和数学,发现没有错误,所以我有一种感觉,这是导致这种情况的语言的内部结构错误。因此,如果有人能在这里帮助我并向我解释什么是最令人满意的问题。提前致谢。

最佳答案

郑重声明:您可以使用以下方法将十进制转换为二进制(字符串):

(70007).toString(2)

不需要乘以 10。此外,永远不会满足 0 >= d

将您的函数重写为:

function dectobin(d) {
  function recurse(dd) {
    return dd > 1 ? recurse(Math.floor(dd/2))+''+dd%2 : dd;
  }
  return recurse(d);
}

应该提供正确的结果

关于javascript - 神秘2 出现在我的JavaScript 十进制到二进制转换器的输出中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9578404/

相关文章:

javascript - 如何将文本放在图像上

javascript - 设备 (ios/Android) 和桌面上的 WebSQL 数据库大小差异

javascript - 未捕获的类型错误 : Cannot read property 'props' of null in React Class

python - 通过恰好 k 次买卖股票获得最大利润

php - 如何从递归层次结构中查找位置,父子关系mysql

javascript - 为什么这个倒计时 javascript 不能在 chrome 以外的任何浏览器上运行

java - 没有重复的视差滚动 |游戏

python - 算法问题,python字符串,不知道

C编程十进制转二进制——递归方法中添加前导零

java - 递归问题