1. 程式人生 > >劍指offer----不用加減乘除做加法

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

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

//拿101和111舉例說明
//n1為1010,即只標記了進位之後為1的位置,即101和111的最高為都為1,
//即從右向左第三位都為1,則進位到第四位,則進位標記的第四位為1,
//如果不用進位,則標記為0,實則就是(num1&num2)<<1
//n2為010,即只標記了未進位且該位置相加為1的位置,使用異或
class Solution {
public:
    int Add(int num1, int num2)
    {
        int n1=(num1&num2)<<1;
        int n2=num1^num2;
        while(n1!=0)
        {
            num1=n1;
            num2=n2;
            n1=(num1&num2)<<1;
            n2=num1^num2;
        }
        return n2;
    }
};