两个数相加不用加法

发布于 2023-10-02 08:15:03 字数 828 浏览 52 评论 0

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

可以使用位运算中的异或操作实现两个数相加。异或操作表示两个二进制数对应位相加,但不考虑进位。同时可以使用与操作和左移操作,来表示进位。具体步骤如下:

  1. 将两个数进行异或操作,得到相加后的结果(不考虑进位)。
  2. 将两个数进行与操作,并将结果左移一位,表示进位。
  3. 将上述两个结果进行相加,重复上述步骤,直到没有进位为止。

具体的代码如下所示:

def add(num1, num2):
    while num2:
        # 异或操作,得到不考虑进位的结果
        result = num1 ^ num2
        # 与操作,并左移一位,表示进位
        carry = (num1 & num2) << 1
        # 将上述两个结果进行相加,重复上述步骤,直到没有进位
        num1 = result
        num2 = carry
    return num1

# 测试
print(add(2, 3))  # 输出 5
print(add(10, 7))  # 输出 17

使用位运算实现加法的时间复杂度为 O(logn),其中 n 为两个数中较大的二进制位数。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文