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

      网上看到一个问题:两个整型数,不准用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函数。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值