网上看到一个问题:两个整型数,不准用if 、switch 、?:等判断语句求出两者最大值 。想了一下没有思路,看了下面的回帖感觉挺有意思的,姑且就记录下来吧。
第一种方法 :
sum=a+b;
delta=abs(a-b);
max=(sum+delta)/2;
min=sum-max;
其实原理就是任何两个数 a, b 都可以唯一表示为 a=x+y; b=x-y; 然后最大值就是 x+abs(y)。 不过,abs这个函数是利用到了 ?: 运算符的,还有sum可能会溢出,不过这个算法还是很赞的。
第二种方法 :
(a>=b && (max=a)) || ( a < b && (max=b));
这里要注意的是 ( a < b && (max=b) )不可以写成(max=b),这样写的话,当a == 0, b < 0 时,max = a 后(a>=b&&max=a) 就为0,所以会进行后面的计算,max = b;这样就错了。这种方法没有溢出的危险。
这个帖子还贴了一个方法也一同贴出来吧。
我个人最欣赏的就是第二个方法啦,后来仿照它写了一个 abs函数。