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

1.辗转相除法

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

2.代码

//程序分析:利用辗除法
#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);

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

猜你喜欢

转载自blog.csdn.net/qq_22847457/article/details/84821293