如何求两个数的最大公因数(原来小学数学不好,倒霉现在)

给定两个数 m , n

#include<stdio.h>
int main ()
{
    int m,n,r;
    printf("请输入m,n\nm为被除数,n为除数\n"); 
    
	scanf("%d%d",&m,&n);//又出现乌龙事件了!!忘加 & 了 
	while(r=m%n)//因为在C语言中当 m%n为 0,循环将会结束
	{
		m=n;
		n=r;	
	}
	printf("%d\n",n); 
    return 0;
}

给大家说一下这个吧!

它是有技巧的辗转相除法,如果你没听说过的话,呢说明你小学数学一定没学好(哈哈哈,其实我也没学过)

就是让被除数除以除数如果能除尽,就说明除数是最大公约数,就直接打印除数。如果除不尽,就让除后的余数当作除数,之前的除数当作被除数,如果余数为0,则这个除数就是最大公约数。如果不为0,呢就一直循环上一步,一直直到没有余数为止。

哎,是不是不太明白为啥,是不是感觉有点扯,如果你也是这样想的(不排除有小学学的特别好的),不要怀疑记住就行,我试过,是对的,嘿嘿嘿

现在来个题外话,为什么刚刚出现了乌龙------

scanf输入一个整数时,数组之前不加取地址符&,其他的要加。刚刚我就忘记加取地址符了,这样是出不来答案的

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值