您的位置:首页 > 其它

关于不用if,switch,?:语句判断两个数大小及其他

2014-09-01 16:12 411 查看
 

http://biancheng.dnbcw.info/c/58607.html

网上看到一个问题:两个整型数,不准用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;这样就错了。这种方法没有溢出的危险。

这个帖子还贴了一个方法也一同贴出来吧。

#include<stdio.h> int get_min( int a, int b ) { return a>b; } int get_max( int a, int b ) { return a<b; } int main() { int a, b; int buf[2]; int min, max; a = 3; b = 7; buf[0] = a; buf[1] = b; min = buf[get_min(a,b)]; max = buf[get_max(a,b)]; printf("%d,%d\n",
min, max); return 0; }

  我个人最欣赏的就是第二个方法啦,后来仿照它写了一个 abs函数。

  int abs(int foo) { (foo>=0) || (foo = -foo); return foo; }

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐