劍指Offer(牛客版)--面試題63 :不用加減乘除做加法

題目描述:

寫一個函數,求兩個整數之和,要求在函數體內不得使用+、-、×、÷四則運算符號。

 

分析:

加法本質是先各位相加不考慮進位,再把進位和前一步結果各位相加,如此反覆直到不產生進位。

 

完整代碼:

class Solution {
public:
    int Add(int num1, int num2)
    {
        do
        {
            //聲明一個變量,表示進位和
            //用異或來代替兩個數相加(不進位)
            int Sum = num1 ^ num2;
            //聲明一個變量,表示進位數
            //用兩個數先與再向左移的方式,計算進位數
            int Carry = (num1 & num2)<< 1;
            //將Sum 賦值給 num1
            //將 Carry 賦值給 num2
            //將進位和和進位數相加
            num1 = Sum;
            num2 = Carry;
        }while(num2 != 0); //直到進位數爲0
        //返回最終的結果
        return num1; 
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章