剑指offer第65题 不用加减乘除做加法(位运算)



问题描述:

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

示例:

输入: a = 1, b = 1
输出: 2

提示:

a, b 均可能是负数或 0
结果不会溢出 32 位整数



解题思路:

  使用为位运算求解,将a,b两个数进行二进制的相加时如下图所示:
在这里插入图片描述
观察发现,无进位和与异或运算规律相同,进位和与运算规律相同(并需左移一位)。所以我们可以利用这个规律进行求和。

解题思路参考文章:位运算解法



代码实现:

public int add(int a, int b) {
    
    
    while(b != 0) {
    
     // 当进位为 0 时跳出
        int c = (a & b) << 1;  // c = 进位
        a ^= b; // a = 非进位和
        b = c; // b = 进位
    }
    return a;
}

提交结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/HC199854/article/details/109465014