解题思路:辗转相除法
注意事项:注意变量的值的变化
参考代码:
/*
从小到大输入两个整数,求最大公约数和最小公倍数
求m,n的最大公约数(辗转相除法)
1)求 m%n=c
2)若c=0,则除数n为两个数的最大公约数;
若c!=0,则m=n,n=c,再执行1)直到c=0
最小公倍数=两个数的乘积/最大公约数
*/
/*
27%15=12
15%12=3
12%3=0
则此时3就是27和15的最大公约数
那么最小公倍数=(27*15)/3=135
*/
#include<bits/stdc++.h>
using namespace std;
int main(){
int m,n,c,p;
cin>>m>>n;
// 检查 m 和 n 是否都为 0
if (m == 0 && n == 0) {
cout << "Error: Both numbers cannot be zero!" << endl;
return 1;
}
// 检查 n 是否为 0(避免除零错误)
if (n == 0) {
cout << m << " " << 0 << endl; // gcd(m, 0) = m
return 0;
}
// 确保 m >= n
if (m < n) {
swap(m, n);
}
p=m*n;
c=m%n;
if(c==0)
cout<<n<<' '<<p/n;
else{
while(c){
m=n;n=c;
c=m%n;
}
cout<<n<<' '<<p/n;
}
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复