求解最大公约数的方法有:辗转相除法、更相减损法、辗转相减法等多种方法可供选择。
这里先用最简单的方法来编写,就是首先判断这两个数中的最小数是不是两个数的最大公约数,然后把这个最小的数简易再来判断是不是两个数的最大公约数,以此循环,直到当前的数能同时被两个数整除的时候,现在的这个数就是两个数的最大公约数,用代码的形式就是下面的写法:
#include"stdio.h"
// 普通做法
int main()
{
int m = 0, n = 0, i = 0;
scanf("%d%d", &m, &n);
int max = m < n ? m : n;
for (i = max; i > 0; i--)
{
if (m % i == 0 && n % i == 0)
{
printf("最大公约数是:%d\n", i);
break;
}
}
return 0;
}
下面说第二种方法就是 辗转相除法:
假设大数是m,小数是n, 直接用 m%n结果为t,取余的结果不是0,就开始循环,把n的值给m,
把t的值给n,重复上面的循环,直到取余的结果为0, 这时的n就是最大公约数。
代码如下:
// 辗转相除法
#include"stdio.h"
int main() {
int m = 0, n = 0, t = 0;
scanf("%d %d", &m, &n);
while (t = m % n) {
m = n;
n = t;
}
printf("最大公约数是:%d\n", n);
return 0;
}