题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
1.程序分析:利用辗除法。
2.上代码:

#include <stdio.h>
//程序分析:利用辗除法。
int main()
{
	int a,b,num1,num2,temp;
	printf("please input two number:\n");
	scanf("%d%d",&num1,&num2);
	if(num1<num2){
		temp = num1;
		num1 = num2;
		num2 = temp;
	}
	a = num1;
	b = num2;
	while(b!=0){   /*利用辗除法,直到b为0为止*/
		temp = a%b;
		a=b;
		b=temp;
	}
	printf("公约数:%d\n",a);
	printf("公倍数:%d\n",num1*num2/a);
}

哈喽C!利用辗除法求最大公约数和最小公倍数
何为辗转相除法?
(以下来自百度百科)
辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:用较小数较大数,再用出现的余数(第一余数)去除数,再用出现的余数(第二余数)去第一余数,如此反复直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
结合辗除法和代码,总结一下:
1.先比较两个数的大小,较大者做分母,假设是b,较小者做分子,假设是a,此时会有一个余数,假设是temp
2.用步骤1得到的余数temp除分母b,也就是b/temp。此时会又有“第二个余数”temp2
3.用第二余数temp2除第一余数temp,也就是temp/temp2
注意:以上操作是求余数,所以用取余%法。
4.重复步骤1,2,3,知道最后的余数是0结束。
再来一次代码:

#include <stdio.h>
//程序分析:利用辗除法。
int main()
{   int a,b,num1,num2,temp;
	printf("please input two number:\n");
	scanf("%d%d",&num1,&num2);
	if(num1<num2)//比较大小,大做分母,小做分子
    {   temp = num1;//这是两个数比大小的经典算法
		num1 = num2;
		num2 = temp;
	}
	a = num1;//小者给a
	b = num2;//大者给b
	while(b!=0)/*利用辗除法,直到b为0为止*/
	{   temp = a%b;//这是重复取余的操作
		a=b;
		b=temp;
	}
	printf("公约数:%d\n",a);
	printf("公倍数:%d\n",num1*num2/a);
}

哈喽C!利用辗除法求最大公约数和最小公倍数

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-07-11
  • 2022-12-23
  • 2022-02-02
  • 2022-12-23
  • 2022-12-23
  • 2021-12-19
猜你喜欢
  • 2021-11-18
  • 2021-04-14
  • 2022-12-23
  • 2022-12-23
  • 2021-06-12
  • 2021-08-23
相关资源
相似解决方案