Q:输入两个数a和b,计算并输出两个数的最大公约数和最小公倍数
A:如下,
1.计算最大公约数
方法一:常规法——先找两个数中较小的那个数,然后用较小的那个数一直减1,直到两个数都可以把这个数整除,这个数就是两个数的最大公约数。
例:18 和 12
①比较两个数,找较小那个:12
②较小的数一直-1:11,10,9,8,……,1
③直到找到同时被整除的数:6(18%6=0;12%6=0)
方法二:辗转相除法——用除数和余数反复做除法(上一步的除数做为被除数,余数做除数),直到余数为0,此时的除数就是最大公约数。
例:a % b = t
18 % 12 = 6
12 % 6 = 0
2.计算最小公倍数
方法一:同计算最大公约数的方法一,找两个数中较大的那个,用较大的数一直加1,直到这个数可以同时整除这两个数,这个数就是最小公倍数。(这里的代码部分和上面同一个实现思路,就省略了)
方法二:如果已经计算除了最大公约数,则最小公倍数=a*b/最大公约数
tip:如果是计算两个数的绝对值的最大公约数和最小公倍数要引入一个库函数——abs(数)——<math.h>
代码展示:
#include<stdio.h>
#include<math.h>
int main() {
int a = 0;
int b = 0;
int max = 0;//最大公约数
int min = 0;//最小公倍数
scanf("%d %d", &a, &b);
//绝对值函数abs()
a = abs(a);
b = abs(b);
//最大公约数
// 方法一:常规法
if (a < b) {
max = a;
}
else {
max = b;
}
//2.最小的那个数一直-1直到a,b可以同时整除
while (1) {
if ((a % max == 0) && (b % max == 0)) {
break;
}
max--;
}
方法二:辗转相除法
//int t = 0;
//while (a % b) {
// t = a % b;
// a = b;
// b = t;
//}
//printf("最大公约数为%d", b);
//最小公倍数
min = a * b / max;
printf("最大公约数为%d\n", max);
printf("最小公倍数为%d", min);
return 0;
}
运行结果:
ok,好啦结束啦~✨