javascript - 带循环的最大公约数

标签 javascript loops if-statement while-loop greatest-common-divisor

我认为我的逻辑是错误的,但我不明白我在哪里犯了错误。我正在尝试找到大公约数,代码将确定如果 a 大于 b 或 b 大于 a 时该怎么做。

我尝试了很多循环,if,while,但最终我删除了所有循环以清除视线。我制作了流程图,但它没有随我的代码一起提供。

var a = 64;
var b = 12;
var newA;

while(a > b && newA != 0){

    newA = a - b;

    if(newA === 0){

        outputObj.innerHTML = outputObj.innerHTML + "GCD is " + b;
    }
}



    while(a < b && newA != 0){

        newA = b - a;
    }

    if(newA === 0){

        outputObj.innerHTML = outputObj.innerHTML + "GCD is " + a;

    }
  }

如果 a 为 64,b 为 12,则 GCD 为 4,如果 a 为 35,b 为 42,则 GCD 为 7

最佳答案

您遇到了一些不同的问题。这看起来像 homework ,所以我会尝试为您指出几个问题的正确方向,而不是例如准确地告诉您代码应该说什么。

  • 在循环中,您永远不会更新 ab 的值。
  • 假设该问题已解决,您的代码将从 b 中多次减去 a,或者从 a 中减去 b > 很多次。这样做会计算一个数字除以另一个数字的余数,而不是计算最大公约数。
    • 我敢打赌,您已经了解了计算最大公约数的算法。再次通读它,将其功能与您的代码的功能进行比较。

这里有一个强大的方法来查找此类代码中的问题:尝试在你的脑海中运行它,假装你是计算机。一步一步地完成计算机会做的事情。对于上面的代码,它可能会这样开始:

  • 好的,我有名为 ab 的变量,其值分别为 64 和 12。还有一个名为 newA 的变量,其值分别为 64 和 12。尚未指定值。
  • 现在我需要检查 a 是否大于 b —— 是的,是 —— 然后检查 newA 是否为零。
    • 等等,此时我还没有给 newA 一个值。 (您在这里发现了一个错误。让我们假设它已修复并继续。)
  • 现在我将 newA 设置为 a-b,即 52。
  • 现在我检查 newA 是否为零,事实并非如此,因此我不需要在 if block 内执行这些操作。
  • 好的,我们已经完成了 while 循环的一次迭代。回到循环的开头。
  • 现在我需要检查 a 是否大于 b —— 是的,是 —— 然后检查 newA 是否为零。
    • 等一下,我正在检查与上次完全相同的内容:没有任何变化。这个循环将如何结束? (您在此处发现了另一个错误。)

等等。

关于javascript - 带循环的最大公约数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58600514/

相关文章:

javascript - 基于 JavaScript 中的另一个下拉菜单创建一个新的下拉菜单

php - 在 php 中,我可以在从 url 获取变量的同时循环更新数据库吗?

c - 如何用0结束循环?

java - 求一个数的因数的方法

java - 程序跳过 'if' 语句并默认为 'else'

javascript - 构建此字符串时我收到什么未定义的信息? JavaScript

javascript - 将 Google Sheet 转换为多级 JSON 数组

javascript - Dash.js 播放器支持 HLS (HTTP Live Streaming) 和 MSS (Microsoft Smooth Streaming) 吗?

按类别和年份排序的 WordPress 帖子

java - 不能让 else if 语句在 Java 中工作