寫一個函數,求兩個整數之和,要求在函數體內不得使用 “+”、“-”、“*”、“/” 四則運算符號。
示例:
輸入: a = 1, b = 1
輸出: 2
做題思路:
這裏使用13二進制爲:1101,9二進制爲:1001來做例子。
異或 1^1 = 0 ,1^0 = 1,0^0 = 0.從這三個結果可以看出異或就是在做加法,但是沒有進位。
與 1&1 = 1,1&0 = 0,0&0 = 0.從這三個結果可以看出與就是跟進位有關。
沒有進位:1101和1001異或的結果:0100
進位:1101和1001與的結果:1001,答案是這個嗎?顯然不是,因爲是進位,所以需要左移10010;
沒有進位:10110
進位:0
輸出10110 = 2^4+2^2+2^1 = 22
代碼展示:
class Solution {
public int add(int a, int b) {
int jinwei = 0;
int bujinwei = 0;
while(b != 0){
bujinwei = a^b;
jinwei = (a&b)<<1;
a = bujinwei;
b = jinwei;
}
return a;
}
}