法一:穷举法。

从两个数中更小的那一个数开始循环(递减)至1, 当满足能被两个数 整除,即为所求, 但数据范围过大,超时

#include <bits/stdc++.h>

using namespace std;

int main()
{
  int a, b;
  cin >> a >> b;
  int n = a > b ? b : a; //较小的值;
  for(int i = n; i > 0; i--)
  {
    if(a % i == 0 && b % i == 0)
    {
      cout << i << endl;
      break;
    }
  }
  return 0;
}

法二: 辗转相除法(求最大公约数的常用方法)

用两数中的较大数除以小的数的余数 做下次运算的除数, 这次的除数做下次运算的被除数...一直这样下去,直到余数为零, 最后一次运算的除数就是所求的最大公约数。

#include <bits/stdc++.h>

using namespace std;

int main()
{
  int a, b;
  cin >> a >> b;
  int n;
  //较大值 较小值
  if(a < b)
  {
    n = a;
    a = b;
    b = n;
  }
  while(b != 0)
  {
	n = a % b;
    a = b;
    b = n;
  }
  cout << a <<endl;
}