题目:实现int add(int a, int b)方法,实现a和b的和,但是内部不允许使用+-*/等算术运算
分析:不能使用+-*/等算术运算,那么能马上想到的肯定就是>> << & |等位运算符,加法实际上可分成两个部分:
无进位加法以及进位。而无进位加法可以用^(异或)实现,进位可以用&(与)以及<<实现。这样我们可以一下公式:
a+b = (a^b) + (a&b)<<1
看这个等式,这个过程中还是有加法,怎么解决?递归即可,而结束条件则为其中某一项等于零时。
但是应该判断哪一项为零时递归结束,看一下说明:
在a = 0, b = 7时,a=a^b =7, b=(a&b)<<1= 0;
而a = 7, b = 0时,a=a^b =7, b=(a&b)<<1= 0;
由上例可以看出(a&b)<<1更容易趋近于0,而a^b可能永远不会趋近于0.
由以上,可以写出以下代码:
1
int add(int a, int b)
2

{
3
if (0==b)
4
return a;
5
else
6
return add(a^b,(a&b)<<1);
7
}