Как вычислить наибольший общий делитель между тремя числами - PullRequest
1 голос
/ 09 октября 2019

Я должен написать программу, которая вычисляет gcd с тремя числами, используя алгоритмы Евклида

Я уже написал программу с 2 числами, которая работает очень хорошо, но я понятия не имею,как я могу сделать то же самое с тремя числами (большая проблема должна быть с алгоритмами Евклида)

if (z1==z2)
{
    Console.WriteLine($"The gcd of two number is {z1}");
}
else { 
    do
    {
        r = z1 % z2;
        gcd = z1;
        z1 = z2;
        z2 = r;
    } while (r != 0);
    Console.WriteLine($"The gcd of two number is {gcd}");

1 Ответ

2 голосов
/ 09 октября 2019

Вы можете написать метод, который получает GCD из 2 номеров, и после вызова его с 2 номерами продолжайте вызывать его с этим результатом и следующим номером, пока не останется больше номеров.

ДляНапример, мы можем написать метод для получения GCD из двух чисел (заимствовано из этого сайта ):

public static int GCD(int first, int second)
{
    while (first != 0 && second != 0)
    {
        if (first > second) first %= second;
        else second %= first;
    }

    return first == 0 ? second : first;
}

Затем мы можем написать другой метод, который принимает переменное число int аргументов (используя массив params), который получает результат первых 2 чисел, а затем продолжает обновлять это значение, передавая его вместе со следующим числом в наш метод GCD:

public static int GCD(params int[] numbers)
{
    // Do some argument validation and return 0 or throw an exception
    if (numbers == null || numbers.Length == 0) return 0;

    // Start with the result being just the first number
    var result = numbers[0];

    // Then get the GCD of the result and the next number 
    // and store that back in the result variable
    for(int i = 1; i < numbers.Length;i++)
    {
        result = GCD(result, numbers[i]);
    }

    return result;
}

Теперь мы можем вызывать метод с любым числом чисел:

Console.WriteLine(GCD(9, 18, 27));              // Output: 9
Console.WriteLine(GCD(4, 8));                   // Output: 4
Console.WriteLine(GCD(25, 15, 100, 30, 9000));  // Output: 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...