求两个数m和n的最大公约数。

方法一:正常思维
#include<stdio.h>
#include<stdlib.h>
 

int main() {

 int m,n,r,t;
 scanf("%d%d",&m,&n);
 while(1) {
  if(m < n)                            //保证m为较大值
{
   t = m;
   m = n;
   n = t;
}
  r = m - m / n * n;
  if(r == 0)                            //余数为0,n就是最大公约数
  {
   printf("%d\n",n);
   break;
  }
  m = n;
  n = r;
  }
 system("pause");
 return 0;
}

方法二:通过函数返回m和n的大小

#include<stdio.h>

#include<stdlib.h>
int min(int m,int n);
int max(int m,int n);

int min(int m,int n)

{
 if(m < n)
  return m;
 else
  return n;
}

int max(int m,int n)

{
 if(m > n)
  return m;
 else
  return n;
}

int main() {
 int m,n,r,t;
 scanf("%d%d",&m,&n);
 while(1) {
  t = m;
  m = max(t,n);
  n = min(t,n);
  r = m - m / n * n;
  if(r == 0)
  {
   printf("%d\n",n);
   break;
  }
  m = n;
  n = r;
   system("pause");
   return 0;
}

方法三:直接用m和n两个变量来求出

#include<stdio.h>

#include<stdlib.h>
 

int main() {

 int m,n;
 scanf("%d%d",&m,&n);
 while(1) {
   m = m - m / n * n;
  if(m == 0)
  {
   printf("%d\n",n);
   break;
  }
  n = n - n / m * m;
  if(n == 0)
  {
   printf("%d\n",m);
   break;
  }
 }
 system("pause");
 return 0;
}
 

算法原理:m = qn + r 中{m,n}和{q,r}的最大公约数是一样的