C语言例题:输入两个正整数m和n,求其最大公约数和最小公倍数。

题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

方法一:短除法
#include<stdio.h>

void text11(void)
{	
	int m, n;		//输入的两个整数
	int z, t = 1;	//t为累乘值
	int i;			//循环变量
	printf("输入两个数:");
	scanf("%d%d", &m, &n);
	if (m < n) {		//默认m大于n的值,方便后面计算
		z = m;
		m = n;
		n = z;
	}
	for (i = 2; i < n+1; i++) {
		if((m%i==0)&&(n%i==0)){		//判断是否还有公约数
			m /= i;
			n /= i;
			t *= i;			//约数累乘,得出最大公约数
			i = 1;			//每次循环开始的变量初始化
			if (n == 1)break;		//判断m和n是否为倍数关系
		}
	}
	if (((m%i != 0) || (n%i != 0))||n==1) {	//没有公约数或者小的值为1的时候开始运算取值
		printf("最大公约数为%d\n", t);
		t = m * n * t;			//约数累乘再乘上m和n的最终余数,得出最小公倍数
		printf("最小公倍数为%d\n", t);
	}
}

方法二:取余除法
# include<stdio.h>
int m, n, k, x, y;		//m、n为输入值,k为交换m、n的中间变量,x表示最大公约数,y表示最大公倍数
	printf("输入两个整数:");
	scanf("%d%d", &m, &n);
	printf("%d和%d的\n",m , n);
	if (m < n) {
		k = n;
		n = m;
		m = k;
	}
	if(m % n != 0){
	x = m % n;		//两数求余除的结果就是最大公约数
	y = m * n / x;		//最小公倍数==(m/x)*(n/x)*x==(m*n)/x
	}
	if (m % n == 0) {
		x = n;
		y = m;
	}
	printf("最大公约数为:%d\n最小公倍数为:%d", x, y);
}

猜你喜欢

转载自blog.csdn.net/qq_44713454/article/details/89603044