#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 条评论

zjnmbiss 5年前 回复TA
@acacac我ac 最小公倍数不等于两个数相乘吧 好像等于两个数相乘除以最小公约数吧
acacac我ac 5年前 回复TA
#include<stdio.h>
int main(){
	int m,n,j,t;
	scanf("%d %d",&m,&n);
	if(m>n){
		t=n;
	}else if(m<=n){
	
	t=m;
}
	for(int i=1;i<=t;i++){
		if(m%i==0&&n%i==0){
			j=i;
		}
	}
	printf("%d %d\n",j,n*m);
	return 0;
}
真不知道哪错了...
圣者psy素爱 5年前 回复TA
@朗格朗日 根本不用去a,b里面的最大或者最小值,好吗。随便选一个都可以,选小的只是减少计算机的计算量,没有必要
qweuihqqi 5年前 回复TA
#include<stdio.h>
int main()
{
	int a, b,c;
	scanf("%d%d", &a, &b);
	if (a>b)
	{
		c=a;
		a = b;
		b = c;
	}
	for (int i = a; i >=1 ; i--)
	{
		if (a%i==0 && b%i==0)
		{
			printf("%d ", i);
			break;
		}
	}
	for (int i1 = 1; i1 <=a*b; i1++)
	{
		if (b*i1%a == 0 )
		{
			printf("%d", i1*b);
			break;
		}
	}
}
bluedevils 5年前 回复TA
这种写的比较直白比较好理解
神鬼一刀流 5年前 回复TA
@努力再努力 改while循环为do...while循环试试
努力再努力 5年前 回复TA
#include <stdio.h>
int main()
{
 int m,n,gy,gb,cj;
 scanf("%d %d",&m,&n);
 cj=m*n;
 while(gy)
 {
  gy=m%n;
  m=n;
  n=gy;
  }
  gb=cj/m;
  printf("%d %d\n",m,gb);
 return 0;
}
请问为什么我用5,7在VC上测试答案是1和35
但我提交时显示答案错误呢
郁闷了很久,求教
朗格朗日 5年前 回复TA
i=(a>b?b:a)这样不会更好吗
saltsish 5年前 回复TA
#include <stdio.h>
int main()
{
	int x,y,t;
	printf("请输入两个整数,求其公约数\n");	
	scanf("%d %d",&x,&y);
	if(x<y)                                               //max=x;min=y
	{	t=x;
		x=y;
		y=t;
	}
	
	for(t=y;t>0;t--)                                        //输入的是正整数,所以循环会一直成立 ,t取到1循环一定成立 
	{
		if(y%t==0&&x%t==0)
		{break;
		}
	}
	
	int z=y;                                                  //存放最小公约数
	for(;z>0;z++)
	{	if(z%x==0&&z%y==0)
		{
			break;
		}
		
	}
	printf("%d %d\n",t,z);
	return 0;
}
saltsish 5年前 回复TA
@默默潜伏 scanf后要加上&