2016-01-22 5 views
0

Я использую эту функцию JavaScript для определения НОД двух значений, полученные из полей ввода:Итерация НОД в JavaScript

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; 
    } 
}; 

Я хотел бы расширить это, чтобы вычислить НОД трех чисел, если пользователь вводит число в третье поле ввода (в противном случае пользователь вводит два и вычисляет в соответствии с этой функцией). Будучи относительно новым для JavaScript, я не уверен, как расширить эту функцию для трех значений. Может ли кто-нибудь помочь?

Fiddle: https://jsfiddle.net/tjj7won4/1/

Кроме того, я хотел бы, чтобы определить LCM в Аналогичным образом, как это наблюдалось в скрипку, но, опять же, я не уверен, как расширить данную функцию. Пожалуйста помоги.

ответ

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, обновляется НОД случае here.

+0

Я изменил скрипку включать входы пользователей и кнопку вычисления, но я не могу понять, как исключить третий вход, должен пользователь оставляет его пустым. Я попытался использовать оператор 'if-else' с' numbers.length', но это был бюст (по крайней мере, я не могу заставить его работать). Вот обновленная скрипка: https://jsfiddle.net/tjj7won4/13/ – newbie2015

+1

@ newbie2015 Если вы хотите дать пользователю только частичный ввод, просто добавьте contidion перед вызовом 'twogcd':' if (numbers [i] || numbers [i] === 0) numbers [0] = twogcd (числа [0], числа [i]); '. В следующий раз, пожалуйста, задайте другой вопрос. – remdevtec

+0

Извинения. Кроме того, это не работает! Сценарий сработает. https://jsfiddle.net/tjj7won4/23/ – newbie2015

0

У вас может быть что-то, что может принимать любое количество аргументов, используя ту же функцию.

И вы можете продлить его тоже: fiddle

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