解题思路:用两个数(a,b)相除取余数t,为了方便待会计算最小公倍数保持(a,b)值不变,就分别把它们赋给(m,n)来计算。我们可以知道两个正整数的乘积是等于它们最大公约数和最小公倍数的乘积。例如(21,7)它们的最大公约数,最小公倍数(1,105),即21*5=1*105,
注意事项:因为题目数是输入两个正整数m和n,所以就没加判断m或n为0 的情况。其实还有其他算法,最直接的暴力求解法,还有更快的stein算法,大家可以学习一下。
参考代码:
int main(void)
{
int a, b,m,n,t;
scanf("%d %d", &a, &b);
m = a; n = b;//把(a,b) //赋值给(m,n)
while (t=m%n) //循环取余数t,直到为0停止循环
{
m = n; //为了把取余的值(最小值)t,赋值给n继续循环,所以先把之前被除的数n赋给除过的数m
n = t;
}
printf("%d ", n);
printf("%d", n = a * b / n); //上面说的定理,求出最小公倍数
return 0;
}
//下面这是加了判断为0,防止非法输入的情况
int main(void)
{
int a, b, m, n, t;
scanf("%d %d", &a, &b);
while(a == 0||b == 0)
{
printf("错误,请重新输入\n");
scanf("%d %d", &a, &b);
}
m = a; n = b;
while (t = m % n)
{
m = n;
n = t;
}
printf("%d ", n);
printf("%d", n = a * b / n);
return 0;
}
0.0分
1 人评分