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).