仅返回上一次迭代的值

时间:2016-05-02 15:32:00

标签: c# loops

我正在尝试使用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 个答案:

答案 0 :(得分: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}");

答案 1 :(得分: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);
        }

    }
}

答案 2 :(得分:1)

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

在变量中保存最大公约数。

答案 3 :(得分:1)

你可以反转循环,在ab之间从1到最小值,从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;
    }             
}

答案 4 :(得分:1)

只需反转枚举序列即可

No