#include<stdio.h>
int main()
{
    int a,b,i,j;//i最大公约数,j最小公倍数 
    scanf("%d %d",&a,&b);
    for (i=(a>b?a:b);i>0;i--){
        if (a%i==0&&b%i==0){
            j=a*b/i;
            printf("%d %d\n",i,j);
            break;    
        }
    }
    return 0;
}

最大公倍数值不会大于a,b最大值;

两个数都能整除它;

最小公倍数等于a*b除以最大公约。

有结果就需要返回,使用break;

点赞(194)
 

0.0分

16 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 68 条评论

Clearlove7 6年前 回复TA
@黑马程序员 scanf中%d 和%d之间要么有空格要么加逗号,不然如何知道你输入的是2和3还是23呢?for循环错了,按照楼主的改吧
c晨光 6年前 回复TA
#include<stdio.h>
int main()
{
    int a,b,i,j,min,max;//j最小公倍数 
    scanf("%d %d",&a,&b);
    max=(a>b?a:b);
    min=(a<b?a:b);
    while(1)
    {
    	i=max%min;
    	if(i==0)
    	break;
    	max=min;
    	min=i;
	}
	j=a*b/min;
	printf("%d %d",min,j);
    return 0;
}
辗转相除法
c晨光 6年前 回复TA
把a>b?a:b改成a<b?a:b效率会更高,你这个相当于枚举算法,只是改良了,可以用辗转相除法,效率会更高
朱子军 6年前 回复TA
@朱子军 @lh793321525 thank you
近如咫尺 6年前 回复TA
@朱子军 scanf里面有个逗号,输入的时候也要有逗号
朱子军 6年前 回复TA
@朱子军 为啥啊,大哥
6年前 回复TA
@朱子军 i=(m>n?m:n)错
朱子军 6年前 回复TA
#include<stdio.h>
int main()
{
	int m,n,i,s;
	scanf("%d,%d",&m,&n);
	for(i=(m>n?m:n);i>0;i--)
	{
		if(m%i==0&&n%i==0) {
	    	s=m*n/i;
		  printf("%d %d\n",i,s);
		   break;	}
	
	}

	return 0;
	
 } 
求大神解惑
黑马程序员 6年前 回复TA
#include<stdio.h>
#include<math.h>
int main()
{
    int a,b,c,m,n;
    scanf("%d%d", &a, &b);
    if(a<b)
    {
        c=a;
        a=b;
        b=c;
    }
    for(n=a%b)
    {
        if(a%n==0&&b%n==0)
        m=a*b/n;
    }
    break;
    printf("%d %d\n",n,m);
    return 0;
}
                                   哪位大神可以帮我看一下错哪吗   谢谢
努力的仓鼠 6年前 回复TA
思想很好