371. Sum of Two Integers
Calculate the sum of two integers a and b, but you are not allowed to use the operator +
and -
.
Example:
Given a = 1 and b = 2, return 3.
题意:
计算两个整数的值,不能用加法和减法。
解答:
一开始的时候,我一直在思考怎么样将加法转化成为乘除法,嗯,是的,思维被限制在加减乘除上面了。开始的时候,想着将a,b化成2的指数,这样的话,a+b就成为了2^a*2^b的指数,然后通过log运算就可以得到a+b的值。
是的,在一般的情况下,这样做是可以的,但是因为题目给的a,b是int类型,所以取INT_MAX和INT_MIN的时候,作为2的指数并且还相乘就直接爆了,使用long long的类型都是不可以的。
然后,去搜索,发现了半加法的思想。就是对于两个二进制数,两个单独的位相加的结果是可以用异或得到的,而进位是可以用与得到的。
代码:
class Solution {
public:
int getSum(int a, int b) {
while(b!=0){
int carry=a&b;
a=a^b;
b=carry<<1;
}
return a;
}
};
复杂度:O(n).