我正在尝试使用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);
}
}
}
}
}
答案 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)
你可以反转循环,在a
和b
之间从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