今天我们来了解下如何用C语言程序代码,求两个数的最大公约数。
比较经典的算法就是使用辗转相除法,
代码如下:
程序运行结果如下:
#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/最大公约数