C语言实例—输入两个正整数m和n,求其最大公约数和最小公倍数(gcc 编译)。

2023-05-16

1.辗转相除法

辗转相除法是古希腊求两个正整数的最大公约数的,也叫欧几里德算法,其方法是用较大的数除以较小的数,上面较小的除数和得出的余数构成新的一对数,继续做上面的除法,直到出现能够整除的两个数,其中较小的数(即除数)就是最大公约数。以求288和123的最大公约数为例,操作如下:
288÷123=2余42
123÷42=2余39
42÷39=1余3
39÷3=13,所以3就是288和123的最大公约数。

2.代码1

//程序分析:利用辗除法
#include<stdio.h>

int main() 
{
	int a, b, num1, num2, temp;
	
	printf("请输入两个正整数:");
	scanf("%d %d", &num1, &num2);
	
	if (num1 < num2) 
	{
		temp = num1;
		num1 = num2;
		num2 = temp;
	}
	
	a = num1;
	b = num2;
	
	/*利用辗除法,直到b为0为止*/
	while (b != 0) 
	{				
		temp = a % b;
		a = b;
		b = temp;
	}
	
	printf("最大公约数是:%d\n", a);
	printf("最小公倍数是:%d\n", num1*num2 / a);

代码2(函数调用)

#include<stdio.h>

// 最大公约数,利用辗除法,直到y为0为止
int HCF(int x, int y)
{
	int temp2;

	while (y != 0)
	{
		temp2 = x % y;
		x = y;
		y = temp2;
	}

	return x;
}

// 最小公倍数函数
int LCM(int x, int y)
{
	return (x*y) / HCF(x, y);
}

int main()
{
	int a, b, temp1;

	printf("请输入两个正整数:");
	scanf("%d %d", &a, &b);

	if (a < b)
	{
		temp1 = a;
		a = b;
		b = temp1;
	}

	printf("HCF=%d, LCM=%d\n", HCF(a, b), LCM(a, b)); //输出最大公约数和最小公倍数

	return 0;
}

3.编译

利用ubuntu gcc编译器进行编译,并运行。

gcc demo_6.1.c -o demo_6.1
./demo_6.1

4.运行结果

5.ubuntu下运行时中文乱码解决

由于原程序在windows下Visual Studio 2017 Preview进行编写,编译运行是在ubuntu下,Windows下中文的默认编码是GB2312,而Linux下默认编码是utf-8,要使ubuntu终端能显示中文字符,将终端字符编码设置成GB2312。

但是这只是临时设置,关闭终端后,字符编码又会返回系统默认的utf-8模式,如果想永久设置,参考博客解决Ubuntu中文显示为乱码

6.参考

1.https://blog.csdn.net/LiuJiuXiaoShiTou/article/details/53414398
2.https://blog.csdn.net/xuezhisdc/article/details/52587431

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言实例—输入两个正整数m和n,求其最大公约数和最小公倍数(gcc 编译)。 的相关文章

随机推荐