2016-05-02 2 views
1

Я пытаюсь вычислить самый большой общий делитель, используя 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}"); 
2

Существует простое решение, которое будет вычислять НОД

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

    } 
} 
+1

От чтения вопроса я предполагаю, что OP является новичком в java. Может быть, не полезно показывать примеры, содержащие тройные операторы и рекурсию, не объясняя это немного дальше. Это просто приводит к копированию кода. –

+0

нормально, конечно нет проблем, я просто попытался показать самый простой способ :) BTW его не программа Java – Mostafiz

+0

Я начинающий на C# и домашнее задание, с которым я имею дело, просит меня найти GCD с использованием петель. Однако я ценю ваше решение. – VaVa

1
int gcd; 
while (i <= Math.Min(a, b)) 
{    
    i++; 
    if (a % i == 0 && b % i == 0) 
    { 
     gcd=i; 
    }    
} 
Console.WriteLine("GCD:{0}",gcd); 

Сохранить наибольший общий делитель в переменной.

1

Вы можете инвертировать цикл, InstEd перехода от 1 до Min между a и b, поиск от Min до 1.

int i = Math.Min(a, b); 
while (i > 0) 
{ 
    i--; 

    if (a % i == 0 && b % i == 0) 
    { 
     Console.WriteLine("GCD:{0}", i); 
     break; 
    }    
} 
1

просто обратная последовательность перечисления будет делать

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--; 
} 
Смежные вопросы