昨天写了一个关于求两个数的最大公约数的代码。
int main()
{
int i = 0;
int j = 0;
int k = 0;
scanf("%d %d", &i, &j);
if (i >= j) {
k = j;
while (k > 0) {
if (i % k == 0 && j % k == 0) {
printf("%d", k);
break;
}
k--;
}
}
else {
k = i;
while (k > 0) {
if (j % k == 0 && i % k == 0) {
printf("%d", k);
break;
}
k--;
}
}
return 0;
}
上面这个代码是我当时想到的,笼统的说就是穷举法。
到后面又学习到一个效率更高的方法:辗转相除法。
int main()
{
int m = 0;
int n = 0;
scanf("%d %d", &m, &n);
int k = 0;
while (k = m % n)
{
m = n;
n = k;
}
printf("%d\n", n);
return 0;
}
这里的运行过程是这样的,输入俩个数之后,这俩个数求余,不断赋值,不断求直到k = 0,循环不进入的时候,这时候n=最大公约数了。
过程就是这样子,如果n>m也不影响因为18%24还是18,然后赋值一波就还是24%18了。