不用加減乘除做加法

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

思路:二進制的位運算
知識:豎式加法中的進位
C++中^是異或,&是相與,<<是向左移位
對於二進制數字,
1^0結果爲1,其他情況爲0,那麼兩個二進制數相異或就是沒有進位的加法
1&0結果爲0,其他情況爲1,那麼兩個二進制數相與就是有進位結果但是沒移位的加法
(滿足交換律)
10 << 1結果爲100,也就是向左移1位即向右加個0(對於十進制來說就是乘以2)

class Solution {
public:
    int Add(int num1, int num2)
    {
        while(num1 != 0){//直到沒有出現進位則結束相加
            int n2 = (num1 ^ num2);//無進位相加
            int n1 = (num1 & num2) << 1;//進位相加,至此完成了一次二進制相加,但遠遠不夠,因爲只要進位不是0,說明還有得進,要繼續循環進位相加
            num1 = n1;
            num2 = n2;
        } 
        return num2;
    }
   
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章