思路:
(1)題意為給定兩個整數,要求不用加減符號求它們的和。
(2)這題屬於簡單題,但是需要跳出思維的牆,需找解題方法。這裡考慮將數字轉為二進位制後進行計算,分兩種情況:相加時沒有進製時直接相加;有進製時要注意加上進製。首先,不考慮進製,對每一位進行相加,這裡使用^(按位異或,對應位相同為0,不同為1),即a^b。然後,判斷並計算進製,對於0加0、0加1、1加0而言,都不會產生進製,只有1加1時才會向前產生乙個進製。因此,進製可以看成是兩個數先做位與(&)運算,然後再向左移動一位(相當於乘以2)。最後,將前兩步結果相加。迴圈上面步驟,直至進製為0((a & b) << 1的結果為0)。
(3)**實現如下所示。希望對你有所幫助。
package leetcode;
public class sum_of_two_integers
return a;}}
LeetCode371 兩整數之和
不使用運算子 和 計算兩整數a b之和。示例 若 a 1 b 2,返回 3。calculate the sum of two integers a and b,but you are not allowed to use the operator and example given a 1 and ...
Leetcode 371 兩整數之和
不使用運算子 和 計算兩整數 a b 之和。示例 1 輸入 a 1,b 2 輸出 3 示例 2 輸入 a 2,b 3 輸出 1 class solution return res 極端情況比較能說明問題 a 0111 1111 b 0000 0001 a b 0111 1110 a b 1 0000...
LeetCode 371 兩整數之和
不使用運算子 和 計算兩整數 a b 之和。示例 1 輸入 a 1,b 2輸出 3示例 2 輸入 a 2,b 3輸出 1先把a和b按位 與 再左移一位就得到了進製的結果,把該結果記為carry。然後把a和b異或,得到的是不算進製的加法結果,然後把該結果賦給a,把carry賦給b,判斷當b大於0時,說...