最简单的方法,就是从两个数中那个较小的数开始,慢慢减小地数。如代码所示:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int m = (a < b) ? a : b;
while (1)
{
if (a % m == 0 && b % m == 0)
{
break;
}
m--;
}
printf("%d", m);//逐个求解
}
如果数字够大,这种方法就会慢很多。
更好的方法是使用一种方法:辗转相除法。
首先使用循环的方式实现,如以下代码所示:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
while(a % b)
{
c = a % b;
a = b;
b = c;
}
printf("%d", b);
return 0;
}//辗转相除法
更为巧妙的是使用函数递归的方式,实现求最大公约数,以下为求最大公约数最强代码:
#include <stdio.h>
int gcd(int a, int b)
{
return b == 0 ? a : gcd(b, a % b);
}//使用函数的递归完成辗转相除法
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int c = gcd( a , b);
printf("%d", c);
return 0;
}
具体没有什么需要特地强调的,都是一些基本思维。