题目描述:输入两个正整数m和n,求其最大公约数和最小公倍数。
算法:
最大公约数:辗转相除法(欧几里得算法),较大的正整数除以较小的数,然后得到余数,用较小的数和余数进行相除直到余数为零,此时较小的数就是最大的公约数。但是设计比较大小和时代的变化,也可从特征考虑:如何用比较简便的算法同时得到最大公约数和最小公倍数。
特征:最大公约数必然小于等于所给出的两个正整数中较小的一个,最大公倍数 必然大于等于之间最大的那个,利用for循环里嵌套if筛选出合适的,break跳出后输出就可以了。
#include<stdio.h>
int main()
{
int m,n,i,j;
scanf("%d %d",&m,&n);
int temp;
if(m>n)
{
temp=m;
m=n;
n=temp;
}//比较大小得出for变量循环时的大小关系,利用特征解决更简便
else
for(i=n;i>=0;i--)
{
if(m%i==0&&n%i==0)
break;//此处记得跳出,不然不会得到结果的
}
printf("%d ",i);//看题目要求,是加空格还是换行,细节也很重要,要总览全局
for(j=1;j<(m*n);j++)
{
if(j%m==0&&j%n==0)
break;
}
printf("%d",j);
}
最后得到结果