Java--求最小公因数

2 篇文章 0 订阅
2 篇文章 0 订阅

下午闲着无聊,随便拿一道题来练练,下面我就跟大家讲讲又简单到复杂的写法

最小公因数:取两个数中最大的数做除数,较小的数做被除数,用最大的数除较小数,如果余数为0,则较小数为这两个数的最大公约数,如果余数不为0,用较小数除上一步计算出的余数,直到余数为0,则这两个数的最大公约数为上一步的余数。

简单写法:

	private static int gcd(int a, int b) {
		return (b == 0) ? a : gcd(b, a % b);
	}

复杂写法: 

	static int gcd(int x, int y) {
		int i;
		if (x < y) {
			x = x + y;
			y = x - y;
			x = x - y;
		}//取两个数中最大的数做除数,较小的数做被除数
		while ((x % y) != 0) {
			i = x % y;
			y = i;
		}
		return y;
	}

简单写法解析(条件)?(A) :(B) ,这里如果满足条件的话就会输出A,反之继续执行B

另外一个有趣的点就是这个地方,这里我自己之前也一直搞不懂能保证是大的数是除数。

后来我自己动手演算了一下:假设a是10,b是9,那么%的计算结果其实是0然后余数为10,那么在第二轮循环中就变成了a就变成了10,a%b也就变成了10%9,实现大的数是除数。如果a本身是大的数这里我就不废话了,直接代入计算你就能理解了。

 

复杂写法解析: 这里说是复杂写法其实写的很明白了,if就是保证传输到下面的数据是大的数为除数,小的为被除数。

while循环中(表达式)为true循环体一直会一直执行,直到表达式为false则跳出循环。

基本上如果你能理解上面这两个点这道题也就能随便写了。

无聊写写的,比较适合新手,大佬勿喷,喜欢的可以点下赞,谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值