有趣的算法--A+B
1. A + B 问题
给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。
- a和b都是 32位 整数
- 可以使用位运算符
复制代码
样例:如果 a=1 并且 b=2,返回3
当不能使用 + 等数学运算符的时候,我们自然而然就会想起使用位运算符(并且题目也给出了提示)
如何表示二进制的加法?
二进制的加法就是: 0+1=1 0+0=0 1+1=0(有进位)
忽视进位的情况下就是一个 “异或运算”
而进位的判断其实也蛮简单的,我们只需要判断哪个位置是 1+1 就行了, 而这个可以通过 “与运算” 来判断
-
TIPs1:此处应该循环判断是否需要进位
-
TIPs2:考虑负数的情况时,我们将负数变为补码---取反加一,此处的加法操作需要调用自定义的加法函数
答案
public class Solution { /** * @param a: An integer * @param b: An integer * @return: The sum of a and b */ public int aplusb(int a, int b) { if(a >> 31 == -1) { aplusb(~a,1); } if(b >> 31 == -1){ aplusb(~b,1); } while(b!=0){ int sum; sum = a ^ b; b = (a & b) << 1; a = sum; } return a; } } 复制代码