不会【2错-2】不用加号求两数之和

https://www.nowcoder.com/practice/59ac416b4b944300b617d4f7f111b215?tpId=13&tqId=11201&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
| 日期 | 是否一次通过 | comment |
|----|----|----|
|2019-01-26 13:20|N|对位运算理解不够:异或表示非进位的加法,与表示进位|
|2019-01-27 13:20|N|递归方法没写好|

题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

1. 递归

public class Solution {
    public int Add(int num1,int num2) {   // (结果,进位)
        if((num1 & num2) == 0) {
            return num1 ^ num2;
        }
         
        return Add(num1 ^ num2, (num1 & num2) << 1);  // 注意下符号优先级,移位的优先级高于与
    }
}

2.非递归

public class Solution {
    public int Add(int num1,int num2) {
        while(num2 != 0) {
            int num = num1 ^ num2;
            int carry = (num1 & num2)<<1;
            num1 = num;
            num2 = carry;
        }
         
        return num1;
    }
}

你可能感兴趣的:(不会【2错-2】不用加号求两数之和)