面试啊,笔试啊,总有些让你觉得很蛋疼,很扯淡,很想骂娘的题目,比如这个。
这时候怎么做?
解题思路 1.
求最大值,那么等于干这件事
a - b > 0 则 return a
else return b
那么我们想想,a - b .> 0 ,那不就意味着符号位是0么。
反之,符号位就是1啊(如果a - b < 0)
假定int是4字节,那么我们就用switch来搞定
int MAX_NO_IF(int a,int b)
{
switch((a-b)&0x80000000)
{
case 0x80000000: //代表a-b是负数,a比b小
return b;
default:
return a;
}
}
用while 或者 for搞
while和for也具有比较的操作
于是
int MAX_NO_IF_WHILE(int a,int b)
{
while((a - b) > 0 )
return a;
return b;
}
当然了,还可以通过以下的判断
a + b > 2a 则b比a大
不过这个也需要上面的方法来做,所以就不写代码了。