面试例题1:
有两个变量a和b,不用"if"、"?:"、"switch"或其他判断语句,找出两个数中间比较大的。
答案:
int max=(a+b+abs(a-b))/2
解析:若a>b,则(a+b+abs(a-b))/2为(a+b+a-b)/2=a.
若a<b,则(a+b+abs(a-b))/2为(a+b+b-a)/2=b.
面试例题2:如何将a、b的值进行交换,并且不是有任何中间变量?
方案一:
a=a+b;
b=a-b;
a=a-b;
但是这样做的缺点是如果a、b都是比较大的二个数,a=a+b时就会超界。
方案二:
a=a^b;
b=a^b;
a=a^b;
这样做无须担心超界问题,无疑比方案一好。