給你兩個整數 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 所有進製的位置,然後將其左移一位,這...