[검은 제안을 의미] 65. 덧셈, 뺄셈, 곱셈, 나눗셈 필요 없음

제목 설명

여기에 사진 설명 삽입
여기에 사진 설명 삽입

// 65. 不用加减乘除做加法

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

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

대답

 位运算 //

// 力扣
// 无进位情况下,位运算加法和异或逻辑运算相同,所以a ^ b表示没有进位的情况
// 下两数的和。有进位情况下,位运算加法和与逻辑运算相同(结果左移一位)
// 所以 (a & b) << 1 是进位情况下两数的和。
// 递归调用主函数add,将进位的加法结果和不进位的加法结果相加,
// 递归终止条件为当b==0,由于进位加法是与逻辑运算左移,
// 左移到最后会使得所有位为,即可停止。
// 执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
// 内存消耗:35.3 MB, 在所有 Java 提交中击败了39.68%的用户
class Solution {
    public int add(int a, int b) {
		if (b == 0)
			return a;
		return add(a ^ b, (a & b) << 1);
    }
}


// 牛客
// 运行时间:13ms,超过58.96%用Java提交的代码
// 占用内存:9600KB,超过72.42%用Java提交的代码
public class Solution {
    public int Add(int num1,int num2) {
        if (num2 == 0)
            return num1;
        return Add(num1 ^ num2, (num1 & num2) << 1);
    }
}

추천

출처blog.csdn.net/fisherish/article/details/115023155