您的位置:首页 > 其它

Leetcode371: Sum of Two Integers

2016-09-23 21:11 423 查看
371. Sum of Two Integers
Calculate the sum of two integers a and b, but you are not allowed to use the operator [code]+
 and 
-
.Example:Given a = 1 and b = 2, return 3.[/code]
题意:
计算两个整数的值,不能用加法和减法。
解答:
一开始的时候,我一直在思考怎么样将加法转化成为乘除法,嗯,是的,思维被限制在加减乘除上面了。开始的时候,想着将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).

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: