題目來源
牛客網
鏈接:另類加法
題目描述
給定兩個int A和B,撰寫一個函式回傳A+B的值,但不得使用+或其他算數運算子,
測驗樣例:
1,2
回傳:3
解題思路
本題可以通過位運算實作,具體實作如下:
- 二進制位異或運算相當于對應位相加,不考慮進位 比如: 1 ^ 1 = 0 —> 1 + 1 = 0 (當前位值為0,進一位) 1 ^ 0 = 1 —> 1 + 0 = 1 (當前位值為1) 0 ^ 0 = 0 —> 0 + 0 = 0 (當前位值為0)
- 二進制位與運算相當于對應位相加之后的進位 比如: 1 & 1 = 1 —> 1 + 1 = 0 (當前位的值進一位) 1 & 0= 0 —> 1 + 0 = 1 (當前位的值不進位) 0 & 0 = 0 —> 0 + 0 = 0 (當前位的值不進位)
- 兩個數相加:對應二進制位相加的結果 + 進位的結果 比如:3 + 2 --> 0011 + 0010 --> 0011 ^ 0010 +((0011 & 0010) << 1) —> (0011 ^ 0010) ^ ((0011 & 0010) << 1), 當進位之后的結果為0時,相加結束
代碼展示
class UnusualAdd
{
public:
int addAB(int A, int B)
{
int sum = 0,carry = 0;
while(B != 0)
{
//對應位的和
sum = A ^ B;
//對應位和的進位,既然是進位,就要整體左移一位
carry = (A & B) << 1;
A = sum;
B = carry;
}
return sum;
}
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/230635.html
標籤:其他
上一篇:用Java撰寫一個猜數程式
下一篇:VUE基礎(4):實作雙向系結
