不用加減乘除做加法48

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

解題思路:

  1. 使用位運算;
  2. 第一步相加不考慮進位,0加0、1加1的結果都是0;0加1、1加0的結果都是1,所以第一步是異或的結果;
  3. 第二步考慮進位,0加0、0加1、1加0都不產生進位;只有1加1會向前產生一個進位。
  4. 此時可以想象成是兩個數先位與運算,然後再做移1位。
  5. 最後將前兩個步驟的結果相加。但仍然要重複前面的兩步,知道不產生進位爲止。

測試用例:

int main(){
    int num1 = 2;
    int num2 = 3;
    std::cout << Add(num1, num2);  //Output: 5

    return 0;
}

函數實現:

int Add(int num1, int num2){
    //和,進位
    int sum, carry;
    do{
        //第一步不考慮進位,異或操作
        sum = num1 ^ num2;
        //檢查進位
        carry = (num1 & num2) << 1;
        num1 = sum;
        num2 = carry;
    }while(num2 != 0);
    return num1;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章