在看数学时候,突然又想起了一个大一时被学长问过的问题,很有趣的问题,我也把它又出给了大一的孩子们,思考题如下:
如何不使用判别符号和比较函数比较两个数的大小?
乍一看脑子里回想很多,比如三目运算,比如二进制位判断,但是回过头一想,就会发现,之前的还使用了比较判别符号。算法的思维的重要性就体现了。
这个问题确实不止一种解决方法,有数学思维的使用,或者计算机思维的方式。
方法一:使用和差法
这是一个高数中典型的理论,估计也曾经是个经典例题
设f(x)和g(x)为连续函数,如果令
U=max{f(x),g(x)},V=min{f(x),g(x)},
那么能够得出
很简单的我们就可以将这两个式子实现了。
方法二:移位判别
a - b的结果, 进行移位, 取符号位, 0说明结果是正数, a > b, 1说明结果是负数, a < b
|
|
方法三:异常判别
分配一个长度为a的数组array[a], 判断array[b]是否越界, 越界在java中会抛出异常
其实我个人觉得这个方法有点耍流氓。。。不过也是一种很独特的思维了吧