題目描述
不使用運算符 + 和 - ,計算兩整數 a 、b 之和。
示例 1:
輸入: a = 1, b = 2
輸出: 3
示例 2:
輸入: a = -2, b = 3
輸出: 1
都知道java位運算符,可怎麼用?
解題思路
異或操作:相同爲0,不同爲1,就已經能模擬出無進位的加法了
比如1+2 = 3
0 1
+ 1 0
-------
1 1
那有進位怎麼辦?與操作+左移一位
比如2+3 = 5
異或一次後 ,算出低位
1 0
+ 1 1
-------
0 1
與操作一次後
1 0
+ 1 1
-------
1 0
左移一位 ,得到進位
1 0
+ 1 1
-------
1 0 << 1 = 1 0 0
此時把進位和低位加起來,這個時候又是一次加法操作,回憶剛剛的a和b的加法操作,把低位和進位分別看做a和b,繼續重複上面的過程,所以這一定是一個while的循環,直到進位爲0退出循環。
public class getSum {
public int getSum(int a, int b){
if(a == 0){
return b;
}
if(b == 0){
return a;
}
int lower = 0;
int carrier = 0;
while(true){
lower = a^b;
carrier = a&b;
if(carrier == 0){
break;
}
a = lower;
b = carrier<<1;
}
return lower;
}
}