static void Main(string[] args) { int m = 2800, n = 3200; int r = 1;//余数 if (m < n) { Console.WriteLine(GetGCM(n, m,out r)); } else { Console.WriteLine(GetGCM(m, n, out r));
} Console.ReadLine(); }
/// <summary> /// 求a,b最大公约数 /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <param name="r"></param> /// <returns></returns> static int GetGCM(int a, int b,out int r) { r = a % b; if (r == 0) { return b;
} else { a = b; b = r; return GetGCM(a, b, out r); } }
/// <summary> /// 求a,b最大公约数 /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <param name="r"></param> /// <returns></returns> static int GetGCM1(int a, int b, out int r) { r = a % b; if (r == 0) { return b; } else { while (r != 0) { a = b; b = r; r = a % b; } return b;
} }
[解决办法]
private void button1_Click(object sender, EventArgs e) { int first = Convert.ToInt32(this.textBox1.Text); int second = Convert.ToInt32(this.textBox2.Text); int result = MaxY(first, second); MessageBox.Show("最大公约数是:"+result + "_" + first / result + ":" + second / result); }
static int MaxY(int firstNumber, int secondNumber) //求最大公约数的函数 { int max = Max(firstNumber, secondNumber); int min = Min(firstNumber, secondNumber); int r = max % min; if (r == 0) //如果把最大的除以最小的数,余数r为0的话,表示min就是最大公约数 { Console.WriteLine("最大公约数是{0}", min); return min; } else //如果余数r不等于0,就把先前的min值当成最大值来用,把余数r当成先前的最小值来用 { //一直不断的相除,直到余数r==0为止,这样就求出最大公约数
while (r != 0) { max = min; min = r; r = max % min; } return min; } } static int Max(int firstNumber, int secondNumber) //求两个数的最大值 { if (firstNumber > secondNumber) { return firstNumber; } return secondNumber; } static int Min(int firstNumber, int secondNumber) //求两个数的最小值 { if (firstNumber > secondNumber) { return secondNumber; } return firstNumber; }