我必须编写一个程序,使用欧几里得算法用三个数字计算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}");
您可以编写一个从 2 个数字中获取 GCD 的方法,并在使用 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