一,題目描述
請編寫一個函數,將兩個數字相加。不得使用+或其他算數運算符。
給定兩個int A和B。請返回A+B的值
測試樣例:
1,2
返回:3
二,程序分析
1.這個題還是比較容易的,首先考慮的是兩者的相加,然後進行按位與的計算,得出結果。
2.但是,又因爲有進位的計算,所以就要考慮僅爲的問題,所以我們要按照與運算,來進行考慮,最後,兩者進行相加,結束。
3.3. 兩個數相加:對應二進制位相加的結果 + 進位的結果比如:3 + 2 --> 0011 + 0010 --> 0011 ^ 0010 + ((0011 & 0010) << 1) —> (0011 ^ 0010) ^ ((0011 & 0010) << 1), 當進位之後的結果爲0時,相加結束
三,程序代碼
class UnusualAdd {
public:
int addAB(int A, int B) {
// write code here
int sum = 0; int tmp =0;
while(B != 0)
{
//進行和
sum = A^B;
//對應和的進位,既然是進位,就要整體向前一位
tmp = (A&B)<<1;
A = sum;
B = tmp;
}
return sum;
}
};
四,程序結果
感覺不錯的話,關注一個再走!!!