解题思路:用两个数(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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复