给定两个正数,如何在不适用 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 -