Я пытаюсь вычислить наибольший общий делитель, используя while loop
. Поэтому я ищу наибольшее число (т.е. последнее значение цикла). Как мне избавиться от предыдущих чисел?
Пример: Наибольший общий делитель 84 и 18 равен 6. Однако мой код дает мне числа 2, 3 и 6. Что мне нужно изменить, чтобы получить только последнее число?
using System;
namespace CalculateGCD
{
class Program
{
static void Main(string[] args)
{
int a = int.Parse(Console.ReadLine());
int b = int.Parse(Console.ReadLine());
int i = 1;
while (i <= Math.Min(a, b))
{
i++;
if (a % i == 0 && b % i == 0)
{
Console.WriteLine("GCD:{0}", i);
}
}
}
}
}
5 ответов
Определите переменную с именем max
, затем выведите max
из цикла while
следующим образом:
int max = 0;
while (i <= Math.Min(a, b))
{
i++;
if (a % i == 0 && b % i == 0)
{
max = i;
}
}
Console.WriteLine("GCD:{0}", max);
Также, если вы используете C # 6, вы можете упростить свой Console.WriteLine
, используя интерполяцию строк следующим образом:
Console.WriteLine($"GCD:{max}");
int gcd;
while (i <= Math.Min(a, b))
{
i++;
if (a % i == 0 && b % i == 0)
{
gcd=i;
}
}
Console.WriteLine("GCD:{0}",gcd);
Сохраните наибольший общий делитель в переменной.
Просто переверните последовательность перечисления будет делать
int a = int.Parse(Console.ReadLine());
int b = int.Parse(Console.ReadLine());
int i = Math.Min(a ,b);
while (i > 1)
{
if (a % i == 0 && b % i == 0)
{
Console.WriteLine("GCD:{0}", i);
break;//greatest will be the first
}
i--;
}
Вы можете инвертировать цикл, вместо перехода от 1 к Мин между a
и b
, ищите от Мин до 1.
int i = Math.Min(a, b);
while (i > 0)
{
i--;
if (a % i == 0 && b % i == 0)
{
Console.WriteLine("GCD:{0}", i);
break;
}
}
Есть простое решение, которое рассчитает НОД
static int GCD(int a, int b) {
return b == 0 ? a : GCD(b, a % b);
}
И вы можете использовать его, как показано ниже
using System;
namespace CalculateGCD
{
public class Program
{
public static void Main(string[] args)
{
int a = int.Parse(Console.ReadLine());
int b = int.Parse(Console.ReadLine());
Console.WriteLine(GCD(a,b));
}
static int GCD(int a, int b)
{
return b == 0 ? a : GCD(b, a % b);
}
}
}
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.