sakeboy


私信TA

用户名:119891420fxl

访问量:5232

签 名:

等  级
排  名 9650
经  验 1141
参赛次数 0
文章发表 5
年  龄 0
在职情况 学生
学  校 合肥工业大学
专  业

  自我简介:

解题思路:

主要因为我是新手,看到优质解题的几种方法都不是一个新手容易能看懂的,所以我就站在新手的角度,仅使用有限的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 人评分

  评论区

  • «
  • »