法一:穷举法。
从两个数中更小的那一个数开始循环(递减)至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;
}