2016-05-02 48 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--; 
}