解题思路:
主要因为我是新手,看到优质解题的几种方法都不是一个新手容易能看懂的,所以我就站在新手的角度,仅使用有限的C语言基础进行答题:
最大公约数,就是两个数所能整除的最大的那个数,且这个数肯定是不会同时大于这两个整数,至多仅大于这两个数的最小的那个。
所以分两种情况:
一、是两个数m,n里面本身最小的那个数就是最大公约数。这种情况就比较简单了,首先判定m和n谁他,若是m最大,那么只要m%n==0,就说明n是最大公约数,m就是最小公倍数;
二、两个数m,n里面最小的那个数不是最大公约数,即m%n!=0;(假使m>n),那么就需要进入循环语句之中,要满足m和n都能整除的数,就是公约数,但是这种数肯定不是唯一的,我们需要的是最大的公约数,所以最好是从大往小的除。且最大公约数肯定是≤n的。所以就从n-1开始--循环;第一个能被同时整除的数就是最大公约数,此时需要终止循环,所以需要增加一句break;
最小公倍数,就是这两个数相乘再除于最大公约数就可以了。
注意事项:
1、首先需要判定m和n谁大谁小;
2、因为只要最大公约数,所以在m%n≠0的时候,一定是在循环中,使用递减的循环会简单点,且一定增加break,否则会出现多组公约数。
参考代码:
#include<stdio.h>
int main()
{
int m,n,t,i,j;
scanf("%d%d",&m,&n);
if(n>m)
{
t=n;
n=m;
m=t;
}
if(m%n==0)
{
i=n;
j=m*n/i;
printf("%d %d",i,j);
}
else
{
for(i=n-1;i>0;i--)
{
if(n%i==0&&m%i==0)
{
j=m*n/i;
printf("%d %d",i,j);
break;
}
}
return 0;
}
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复