371 兩整數之和

2022-09-18 23:00:12 字數 856 閱讀 3270

給你兩個整數 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 0

// 0 1 0 1 0

// 0 1 1 0 1

// 1 0 0 1 0

// 1 0 1 0 1

// 1 1 0 0 1

// 1 1 1 1 1

可以得出以下結論:

sum = a ^ b;

c = a & b;

故思路可變成兩個數異或,得到不進製的和,而後和與此前的進製相加,直到進製是0;

**為:

class solution 

return a;

}}

我第一遍寫上述思路時,由於不了解計算機內部的 二進位制 邏輯,選擇先j**a.lang.integer.tobinarystring轉換為二進位制的字串,此時的字串為反碼表示,如果是負數的話,再次截斷。對於兩個轉變後的字串,又沒有辦法用上述邏輯了,只能對應位逐個運算,很是麻煩。

後來,看了題解,原來如此。

悟了個大東西

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 兩整數之和

1.題目 不使用運算子 和 計算兩整數 a b 之和。示例 1 輸入 a 1,b 2 輸出 3示例 2 輸入 a 2,b 3 輸出 12.分析 在不採用加法和減法的前提下計算兩整數之和,這需要使用與運算子和異或運算子,首先,利用與運算 a b,計算出 a 和 b 所有進製的位置,然後將其左移一位,這...