C语言输入两个数,求他们的最大公约数和最小公倍数

总结了两种方法,第一种:
#include

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
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;
}

你可能感兴趣的:(C语言)