不用+、-、×、÷對兩個數求和

題目:不用+、-、×、÷對兩個整數求和。

思路:
主要分成3步:
第一步不考慮進位,對每一位相加。0加0與1加1的結果都0,0加1與1加0的結果都是1。我們可以注意到,這和異或的結果是一樣的。對異或而言,0和0、1和1異或的結果是0,而0和1、1和0的異或結果是1。
接着考慮第二步進位,對0加0、0加1、1加0而言,都不會產生進位,只有1加1時,會向前產生一個進位。此時我們可以想象成是兩個數先做位與運算,然後再向左移動一位。只有兩個數都是1的時候,位與得到的結果是1,其餘都是0。
第三步把前兩個步驟的結果相加。相當於輸入前兩步驟的結果來遞歸調用自己。

int addWithoutArithmetic(int num1,int num2){
    if(num2 == 0)
        return num1;
    int XORresult = num1 ^ num2;
    int carry = (num1 & num2)<<1;
    return addWithoutArithmetic(XORresult,carry);
}
發佈了66 篇原創文章 · 獲贊 17 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章