不能用 + - * / 等符号,那么首先想到的就是位运算了。
直接上代码……
递归代码:
int solution1(int a, int b)
{
if (0 == b)
return a;
else
{
int sum = a ^ b;
int carry = (a & b) >> 1;
return solution1(sum, carry);
}
}
不用递归:
int solution2(int a, int b)
{
while(b)
{
int temp = a ^ b;
b = (a & b) >> 1;
a = temp;
}
return a;
}
另有一很巧妙的方法:利用地址偏移
int solution3(int a, int b)
{
char *c = (char *)a;
return (int)&c[b];
}