文章出處
文章列表
弱菜刷題還是刷中文題好了,沒必要和英文過不去,現在的重點是基本代碼能力的恢復。
【題目】
劍指offer
寫一個函數,求兩個整數之和,要求在函數體內不得使用+、-、*、/四則運算符號。
【思路】
直覺想到用二進制的位運算。最后寫出來是一個迭代的過程。
每次迭代先計算x和y的和但不處理進位,那么相當于做異或,得到res1
然后處理進位問題,相當于計算與運算,得到res2
那么res2左移1位,再加到res1上,則整個運算的最終結果轉化為res1+(res2<<1)
因為res2做左移,總會減小到0,那時候的res1就是最終結果
class Solution{
public:
int Add(int x, int y){
int sum;
int carry;
while (true){
sum = x^y;
carry = (x&y) << 1;
y = carry;
x = sum;
if (y == 0){
break;
}
}
return sum;
}
};
文章列表
全站熱搜