LeetCode 371 Sum of Two Integers

来源:互联网 发布:延边大学知乎 编辑:程序博客网 时间:2024/05/29 12:14

题意不是很难,不让用‘+’, ‘-’,进行求和运算,只有两个数,既然不让用加号,那最容易想到的就是二进制模拟加法运算。

通过简单二进制运算可以验证,a+b,不加进位的简单相加可以表示为 a^b , 进位可以表示为 (a&b) << 1,之后再把两个加起来,但是加法不能用,所以,,继续模拟,跑循环,直到表示简单相加的数为0为止。

验证一下,7+9=16,0111 + 1001 = 10000

第一步,进位为 (7 & 9) << 1 == 0010, 简单相加 (7 ^ 9) == 1110。

第二步,进位为 (0010 & 0111) << 1 == 0100, 简单相加 (0010 ^ 0111) == 1100。

第三步,进位为 (0100 & 1100) << 1 == 1000, 简单相加 (0100 ^ 1100) == 1000。

第四步,进位为 (1000 & 1000) << 1 == 10000, 简单相加 (1000 ^ 1000) == 0000。

出现了0,跳出循环,得到最终结果,嘿嘿。

题目链接

代码如下:

class Solution {public:    int getSum(int a, int b) {        if (!b) return a;        if (!a) return b;        return !b ? a : getSum((a&b)<<1, (a^b));    }};


原创粉丝点击