方法一:辗转相除法
int main()
{
int a, b;
scanf("%d%d", &a, &b);
//注意 不需要比较a和b的大小 后面会换回来的
int c;
while (b)
{
c = a % b;
a = b;
b = c;
}
printf("最大公约数为:%d", a);
}
方法二:更相减损法---->较大的数减去较小的数,差值赋给原本较大的数
int main()
{
int a, b,c,tmp;
scanf("%d%d", &a, &b);
while (a != b)
{
if (a > b)
{
a = a - b;
} else {
b = b - a;
}
}
printf("最大公约数为:%d", a);
}
方法三:穷举法------>两数选择较小的数从1开始遍历 判断两数共同的因子,求最大值
//#define N 20
int main()
{
int a, b,i,j=0;
int arr[N];
scanf("%d%d", &a, &b);
//从小到大需要比较大小 麻烦
/*for (i = 1; i <= a; i++)
{
if (a % i == 0 && b % i == 0)
{
arr[j++] = i;
}
}
int max = arr[0];
for (i = 1; i <= j - 1; i++)
{
if (max < arr[i])
{
max = arr[i];
}
}*/
for (i = a; i >= 1; i--)
{
if (a % i == 0 && b % i == 0)
{
break;
}
}
printf("最大公约数为:%d", i);
}