两个数相加不用加法
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; } }
可以使用位运算中的异或操作实现两个数相加。异或操作表示两个二进制数对应位相加,但不考虑进位。同时可以使用与操作和左移操作,来表示进位。具体步骤如下:
- 将两个数进行异或操作,得到相加后的结果(不考虑进位)。
- 将两个数进行与操作,并将结果左移一位,表示进位。
- 将上述两个结果进行相加,重复上述步骤,直到没有进位为止。
具体的代码如下所示:
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论