371 兩整數之和

2022-05-12 06:23:48 字數 1004 閱讀 5204

1. 題目

不使用運算子+-​​​​​​​,計算兩整數 ​​​​​​​ab​​​​​​​之和。

示例 1:

輸入: a = 1, b = 2

輸出: 3

示例 2:

輸入: a = -2, b = 3

輸出: 1

2. 分析

在不採用加法和減法的前提下計算兩整數之和,這需要使用與運算子和異或運算子,首先,利用與運算 a & b,計算出 a 和 b 所有進製的位置,然後將其左移一位,這樣可以得到所有需要進製的值進製後最終的位置。然後利用異或運算 a ^ b,由於異或運算下相同位為0,不同位為1,所以可以獲取到 a + b 的不進製下的值。其次,如果是涉及到負數的加法,由於計算機運算都是採用補碼,正數的補碼為它本身,負數的補碼為其取反再加一,符號位不變,所以負數的加法在計算機底層實現的時候與正數的加法是一致的。

舉個例子,6 + 3,轉換成二進位制就是 110 + 011,計算出需要進製的值 carry 為 (a & b) << 1 = 100, 不需要進製的值 nocarry 為 a ^ b = 101,首先需要判斷 carry 和 nocarry 之間相加的情況是否會產生進製,即求出 carry & nocarry 的值是否為 0, 不為 0 的話說明需要再次進製,100 & 101 = 100 不為 0,所以先儲存 nocarry 的值到 tmp ,再重新計算 nocarry 的值 即 nocarry = carry ^ nocarry ,然後計算新的 carry 值  carry = tmp & carry,然後再對新的 carry 和 nocarry 進行之前的判斷,直到 carry 值為 0,這時返回nocarry即可。

3. 實現

class

solution

return

sum;

}};

371 兩整數之和

不使用運算子 class solution def getsum self,a int,b int int mask 0x100000000 整型最大值 max int 0x7fffffff min int 0x80000000 while b 0 計算進製 carry a b 1 取餘範圍限制在 ...

371 兩整數之和

題目 不使用運算子 和 計算兩整數a b之和。示例 示例1 輸入 a 1,b 2 輸出 3 思路 位運算 可以發現,在位運算中的加法 不考慮進製1 就是異或運算的結果。但是僅僅有異或運算是不夠的,我們還需要知道,何時發生了進製,這就需要用到 運算 注意到 運算得到的進製1需要移1位來得到實際真實的進...

371 兩整數之和

給你兩個整數 a 和 b 不使用 運算子 和 計算並返回兩整數之和。示例 1 輸入 a 1,b 2 輸出 3示例 2 輸入 a 2,b 3 輸出 5 1000 a,b 1000因為不能使用加號和減號,故需要從計算機本身邏輯出發,即二進位制 a b c sum c 0 0 0 0 0 0 0 1 1 ...