2016-05-02 95 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變量然後打印maxwhile循環這樣的:

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

有一個簡單的解決方案,其將計算GCD

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

好吧,當然沒問題,我只是試圖展示最簡單的方法:)順便說一句,它不是一個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的的ab之間從1要去民,從民搜索到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--; 
}