A + B 問題(不能用+等數學運算子。)
阿新 • • 發佈:2019-02-05
給出兩個整數a和b, 求他們的和, 但不能使用 + 等數學運算子。
說明
1.a和b都是 32位 整數麼?
是的
2.我可以使用位運算子麼?
當然可以
樣例
如果 a=1 並且 b=2,返回3
解題思路:
首先想到的是異或運算,如二進位制的11^10=01,每一位異或都相對於每一位的加法,但是缺乏進位。
使用按位與“&”運算可以幫助我們判斷該位是否有進位。如11&11 =11,說明兩位在加運算中都產生了進位1。由於該進位是加在高位上的,所以
很自然的想到了把與運算的結果往左移一位,再和異或結果相加,即為最後結果。
程式碼
public class Solution { public int aplusb(int a, int b) { // write your code here // a^b;//10^11=01沒有進位 // a&b //10&11=10 說明第2個數有進位,但是進位在高位(第3位) // <<1 //左移動一位 就是100 // 最後把結果再進^操作給a,直到沒有進位 if (b == 0)//有1代表還有進位 return a; else return aplusb(a^b, (a&b) << 1); } };