《劍指offer》-不用加減乘除做加法

題目描述

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


解法:

1.兩個數進行按位異或,那麼結果就是不含進位的加法值

2.將兩個數進行按位相與,再向左移動一位,那麼結果就是兩個數相加產生和的進位值

3.將不含進位的加法值與進位值,不斷進行循環,直到進位爲0,那麼結果就是兩個數的和值

class Solution {
public:
    int Add(int num1, int num2)
    {
	int sum;
        int carry;
        do{
            sum = num1 ^ num2;  //異或,不帶進位的和
            carry = (num1 & num2) << 1;  //進位計算
            num1 = sum;
            num2 = carry;  //進位
        }while(carry != 0);  //若進位爲0,則結束計算
        return num1;
    }
};


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