求两个数的最大公约数, 可以用辗转相除法.
假设两个数是 m 和 n,用 m 模 n,若值为 0,则最大公约数为 n.
若值不为 0,将 n 的值赋给 m,将上一次的取模的结果赋给 n,再用 m 模 n,直到结果为 0,此时的 n 则为最大公约数.
代码一:
#include<stdio.h>
int main(void)
{
int m = 0;
int n = 0;
printf("Enter two integers:\n");
scanf("%d %d", &m, &n);
while (1)
{
if (m % n == 0)
{
printf("最大公约数是%d\n", n);
break;
}
else
{
int tmp = m % n;
m = n;
n = tmp;
}
}
return 0;
}
代码二:
#include<stdio.h>
int main(void)
{
int m, n;
printf("Enter two positive integers (q to quit): ");
while (scanf("%d %d", &m, &n) == 2 && m > 0 && n > 0)
{
while (m % n)
{
int tmp = m;
m = n;
n = tmp % n; // 这句与 while 判断部分做了相同的运算,可以省略一个,见代码三
}
printf("greatest common divisor(gcd) is %d.\n", n);
printf("Enter two positive integers (q to quit): ");
}
return 0;
}
代码三:
#include<stdio.h>
int main(void)
{
int m = 0;
int n = 0;
int r = 0;
printf("Enter two integers:\n");
scanf("%d %d", &m, &n);
while (r = m % n)
{
m = n;
n = r;
}
printf("最大公约数是%d\n", n);
return 0;
}