【问题标题】:Iterating GCD function in JavaScript在 JavaScript 中迭代 GCD 函数
【发布时间】:2016-01-22 12:56:28
【问题描述】:

我正在使用这个 JavaScript 函数来确定从输入字段中获得的两个值的 GCD:

Math.GCD = function(first,second) {
    if (first < 0) first = -first;
    if (second < 0) second = -second;
    if (second > first) {var temp = first; first = second; second = temp;}
    while (true) {
        first %= second;
        if (first == 0) return second;
        second %= first;
        if (second == 0) return first;
    }
};

我想扩展它来计算三个数字的 GCD,如果用户在第三个输入字段中输入一个数字(否则,用户将输入两个并根据这个函数计算)。作为 JavaScript 的新手,我不确定如何将此函数扩展为三个值。有人可以帮忙吗?

小提琴:https://jsfiddle.net/tjj7won4/1/

另外,我想以同样的方式确定 LCM,就像在小提琴中观察到的那样,但是,我再次不确定如何扩展给定的功能。请帮忙。

【问题讨论】:

    标签: javascript jquery greatest-common-divisor


    【解决方案1】:

    要为任意数量的参数 n 扩展函数,只需在参数数组上循环 n-1 次。

    这是因为数学上gcd(a,b,c) = gcd(a,gcd(b,c))

    用法:var GCDresult = Math.GCD([16,222,70]); // result: 2

    // numbers is an array of numbers: ex. [15,20,35,170]
    Math.GCD = function(numbers) {
      for (var i = 1 ; i < numbers.length ; i++){
        // take the next number for GCD with the first, 
        // and store the result back in the first.
        numbers[0] = twogcd(numbers[0], numbers[i]);
      }
      return numbers[0];
    
      // following is your original GCD function
      function twogcd(first, second) {
        if (first < 0) first = -first;
        if (second < 0) second = -second;
        if (second > first) {var temp = first; first = second; second = temp;}
        while (true) {
            first %= second;
            if (first == 0) return second;
            second %= first;
            if (second == 0) return first;
        }
       }
    };
    

    您的 JSFiddle,已针对 GCD 案例更新为 here

    【讨论】:

    • 我已更改小提琴以包括用户输入和计算按钮,但我无法弄清楚如何排除第三个输入,如果用户将其留空。我尝试过使用if-elsenumbers.length 的声明,但那是失败的(至少,我无法让它工作)。这是更新的小提琴:jsfiddle.net/tjj7won4/13
    • @newbie2015 如果你想让用户只提供部分输入,只需在调用twogcd之前添加一个条件:if (numbers[i] || numbers[i] === 0) numbers[0] = twogcd(numbers[0], numbers[i]);。下次,请再问一个问题。
    • 道歉。另外,这似乎不起作用!脚本崩溃。 jsfiddle.net/tjj7won4/23
    • 条件必须是numbers[i] || numbers[i] === 0,因为如果用户留下一个空白框,那么 numbers[i] === 未定义。 numbers[i]false 也是在 number[I] === 0 的情况下,所以你必须在条件中包含 numbers[i] === 0。这是 JSFiddle:jsfiddle.net/tjj7won4/44.
    【解决方案2】:

    通过使用相同的函数,您可以拥有可以接受任意数量参数的东西。

    你也可以扩展它:fiddle

    Math.GCDe = function() {
        var result = arguments[0];
            for (var i=1;i<arguments.length;i++) 
            result = this.GCD(result,arguments[i]);
        return result;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      • 2019-01-03
      相关资源
      最近更新 更多