A+B問題

weixin_33913332發表於2018-05-25

A+B問題

描述

給出兩個整數a和b, 求他們的和, 但不能使用 + 等數學運算子。

思路:

1、 採用二進位制進行加法操作
2、 a ^ b ; 相異為1-->二進位制不進位的結果;即0+1=1,1+0=1,0+0=0
3、 (a & b ) << 1 ; (a & b)二進位制相同位都是1則該位為1,即1+1 = 10,需要進位則右移一位-->二進位制進位的結果
4、 遞迴呼叫(2步 + 3步)

好了,我們跟著思路實現一下

遞迴實現
public static int aplusb(int a , int b) {
        if(a == 0 ) {
            return b;
        }
        if(b == 0 ) {
            return a;
        }
        
        int i , j;
        i = a^b;//不進位得到的結果
        j = (a&b)<<1;//進位得到的結果
        
        //繼續相加
        return aplusb(i , j);
    }

迭代實現
public static int aplusb2(int a , int b) {
        int temp;
        while(a != 0 && b != 0 ) {
            temp = a ^ b;
            b = (a & b) << 1;
            a = temp;
        }
        
        return a == 0 ? b : a;
    }

相關文章