提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
刚刚开始学习的c语言的同学大多数都会遇到的问题----求最大公因数。很多同学最开始都不知道怎么处理这样的问题(包括博主自己(超小声))。这边介绍两种解法-----试除法和辗转相除法。
一、试除法思路
- 确定两个数之间较小值,创建新变量p,将较小值赋予p.
- 用p对两个数进行除余判断是否为0,不为0则p-1再重复第二步的操作直至结果为0,则是最大公因数。
代码如下:
int main()
{
int m = 0;
int n = 0;
scanf("%d %d", &m, &n);
int p = m < n ? m : n;//求较小值
while (1)
{
if (m%p == 0 && n%p==0)
{
printf("%d\n", p);
break;
}
p--;
}
return 0;
}
二、辗转相除法思路
- 用两个数之间一个数去除余另一个数,若不为0,将余数赋予新变量r.
- 再将除余数赋值给被除余的数,直至一个数除余另一个数的余数为0,则最大公因数是最后一次除余数。
- 注意点:这边不需要判断两个数的大小,例如 m为18,n为24,m%n的余数为18,再将24赋值给m,n被赋值18。
代码如下:
int main()
{
int m = 0;
int n = 0;
scanf("%d %d", &m, &n);
int r = 0;
while (r=m%n)//当最后余数为0正好为假结束循环
{
m = n;
n = r;
}
printf("%d\n", n);
return 0;
}
三、最小公倍数思路
这里简单提一嘴:可以使用试除法或者是最小公倍数等于m*n/k,k是最大公因数。
四、写到最后
要是觉得写得还不错可以点个赞,要是文章哪里写得有问题或者什么疑问,可以在评论区留言。
沙漠的尽头必定是绿洲,坚持下去!