总结了两种方法,第一种:
#include<stdio.h>
int main(){
int m, n;
int i,j;
int count = 0; //计时器
scanf_s("%d%d", &m, &n);
if (m < n) {
for (i=m; i >=m/2 ; i --) {
if (m%i == 0 && n%i == 0) {
printf("其最大公因数为:%d\n", i);
}
}
for (j = n; j <= m * n; j++) {
if (j%n == 0 && j%m == 0) {
count++;
if (count == 1) { // 第一次的条件才符合!
printf("其最小公倍数为:%d\n", j);
}
}
}
count = 0;
}
if (m > n) {
for (i = n; i >= n / 2; i--) {
if (n%i == 0 && m%i == 0) {
printf("其最大公因数为:%d\n", i);
}
}
for (j = m; j <= m * n; j++) {
if (j%m == 0 && j%n == 0) {
count++;
if (count == 1) {
printf("其最小公倍数为:%d\n", j);
}
}
}
count = 0;
}
if(m == n) {
printf("其最大公因数为:%d\n", n);
printf("其最最小公倍数为:%d\n", n);
}
return 0;
}
上面那种方法比较好理解,但代码陈杂,太长。第二种方法:
但要明确一个知识点:
4 % 5 == 4; //一个小的数对一个大的数求余等于它本身。
5 % 4 == 1; //这个就不用说了!
看代码!:利用交换法。
#include<stdio.h>
int main(){
int m, n, x, y,z;
scanf_s("%d%dPlease input two number:", &m, &n);
x = m; y = n;
while (y != 0) { //当y == 0时,跳出循环
z = x % y; //交换法
x = y;
y = z;
}
printf("它们的最大公约数为:%d\n", x);
printf("它们的最小公倍数为:%d\n", (m*n) / x);
return 0;
}