题目3:从键盘输入两个数,求最大公约数和最小公倍数。
程序分析:
最大公约数<最小值,其为能除以两者的最大值
最小公倍数>最大值,其为两者乘积都能得到的最小值
两数乘积=最大公约数x最小公倍数
(1)暴力求解
从两数中最小值开始逐渐减小并让这两个数分别相除,直到没有余数为止。
10 15
15/10=1...5 10/10=1...0
15/9=1...6 10/9=1...1
15/8=1...7 10/8=1...2
15/7=2...1 10/7=1...3
15/6=2...3 10/6=1...4
15/5=3...0 10/5=2...0
代码:
#include<stdio.h>
int main(){
int a,b;
int m,n;
printf("请输入两个整数:");
scanf("%d %d",&a,&b);
m=a<b?a:b;//较小值
whlie(1){
if(a%m==0&&b%m==0){
printf("最大公约数为:%d\n",m);
break;
}
--m;
}
return 0;
}
从求得最大公约数中求最小公倍数。
n=a*b/m;
printf("最小公倍数为:%d",n);
结果展示:
(2)辗转相除法=欧几里得算法
将两数中的大数除以小数取余,再用小数除以余数。。直到没有余数为止
10 15
15/10=1...5
10/5=2...0
代码:
#include<stdio.h>
int main(){
int a,b,c;
int n;
printf("请输入两个整数:");
scanf("%d %d",&a,&b);
if(b>a){//找出最大值
c=b;
b=a;
a=c;
}
do{
n=a%b;
a=b;
b=n;
}while(b);//辗转相除
printf("最大公约数为:%d",a);
return 0;
}
通过if语句把两个数中大的值放a中,小的值放b中;