題目:
不使用運算符 +
和 -
,計算兩整數 a
、b
之和。
示例 1:
輸入: a = 1, b = 2 輸出: 3
示例 2:
輸入: a = -2, b = 3 輸出: 1
C代碼:
int getSum(int a, int b) {
int sum = 0,carry = 0;
while(b)
{
sum = a ^ b;
carry = (a & b) << 1;
a = sum;
b = carry;
}
return a;
}
Python代碼1:
class Solution:
def getSum(self, a, b):
MAX = 0x7FFFFFFF
MIN = 0x80000000
mask = 0xFFFFFFFF
while b != 0:
a, b = (a ^ b) & mask, ((a & b) << 1) & mask
return a if a <= MAX else ~(a ^ mask)
Python代碼2:
class Solution(object):
def getSum(self, a, b):
l = [a,b]
return sum(l)
心得:此題考查的是位運算的知識,由於Python不是固定的32位,所以實現起來稍微繁瑣,Python1的思路和C的思路是一樣的,關於位運算實現相加的算法,先舉一個十進制加法的例子,比如45+67=112,如果不考慮進位得到的結果是2,只考慮進位得到的結果是110,加起來正好是112,對於二進制其實也是這樣的,因此我們可以將加操作和進位操作分開,二進制不進位加法其實就是異或操作,而進位操作實際上就是兩個數對應位都爲1時的左移,考慮到進位次數有限,當進位爲0時,加出來的就是答案了。Python代碼2只是滿足題意的一個代碼,不作爲算法練習使用。