给定两个正数,如何在不适用 if ,else 和比较运算符的情况下,找出其中的最大值

本文介绍了一种在不使用 if, else 和比较运算符的情况下,找到两个正数中较大值的方法。通过取余和减法操作,结合数学性质,构造公式来判断哪个数更大,并给出详细解释和代码实现。" 78167619,5567819,Python实现支持向量机SVM,"['机器学习', 'Python编程', '支持向量机', '统计学习方法']
摘要由CSDN通过智能技术生成

给定两个正数,如何在不适用 if ,else 和比较运算符的情况下,找出其中的最大值

为了方便说明原理,假定 a 比 b大,且a 和 b 都是正数

那么有以下两条重要结果:
(a % b) < a
(b % a) == b

操作符两边减去右边,可以得到:
(a % b) - a < 0
(b % a) - b == 0

为了看起来代码清爽,我们用两个符号替代上面的公式:
x = (a % b) - a
y = (b % a) - b

所以:
x < 0
y == 0

重点来了,回忆一下下面两条结论:
任何数乘以 0 都会变成 0 ,任何数加上 0 都不改变自身,
任何数乘以再除以一个非0的数,结果还是它自身.

我们的假设里 a 为较大值,所以最终目标就是留下 a , 这时候 x 和 y 的作用就体现出来了,
可以把 a 从一个对称公式里提出来 ,如下:
result = (x * a + y * b) / (x + y)
result = (x * a + 0 * b) / (x + 0)
result = (x * a) / x
result = a

有人可能会想到,用不了那么复杂,用个更简单的公式就能得到结果:

result = x / x * a + y / y * b

然而除数不能为 0 ,而x 和 y一定有一个是 0,所以这个是不对的.

我们再把上面公式中的 x 和 y 还原,就得到以下公式:

result = ((a % b -

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值