今天我们来了解下如何用C语言程序代码,求两个数的最大公约数

比较经典的算法就是使用辗转相除法

代码如下:

用C语言,两个数的最大公约数_辗转相除法

程序运行结果如下:

用C语言,两个数的最大公约数_赋值_02

#include<stdio.h>

int main()

{

int m = 0;              //创建整型(int)的变量m,n来接收从键盘输入的值

int n = 0;

int r = 0;           //创建整型(int)的变量r来接收m%n的余数

scanf("%d%d",&m,&n);  //从键盘输入两个整型变量,并把它们存入m,n中

while (r = m % n)     //进行while循环判断n是否可以被整除是不是最小公约数来决定是否进入下一次循环

{

 m = n;            //进入循环体表明n不是最小公约数,于是我们把n的值赋值给m

 n = r;            //把m%n的余数r的值赋值给n,接着来到循环的条件判断,直至循环体的条件值为0跳出整个循环

}

printf("最大公约数的值为:%d",n);     //此刻n的值就是两个数的最大公约数,调用打印函数printf(),打印出最后的结果

return 0;

}

上述就是两个数用C语言求最大公约数的代码,我已经做好了注释,当然还有别的逻辑写出不同的代码,达到相同的效果,答案结果不唯一。

重点就是辗转相除法的运算公式:m%n=r       当r的值不为0时,

---------------------------------m=n              把n的值赋值给m

---------------------------------n=r              把余数r的值赋值给n

--------------------------------m%n=r         再次判断r的值是否为0

-------------------------------不断的重复上述操作直至余数r的值为0,此时n的值就是两个数的最大公约数。

补充知识点:不用判断m与n的值谁大谁小,谁做被除数,谁做除数,

举个简单的例子:m=16,n=24 ,先假设r的值为0,r=0

根据上述的公式我们可以得出如下过程:m%n=r  ->r=16  

                                                           m=n     ->m=24    

                                                           n=r       ->n=16

进入下一次循环判断接着执行m%n=r,此时m=24,n=16

这样的结果与我们一开始m=24,n=16并无任何区别。

举一反三:最小公倍数=m*n/最大公约数