题目描述:
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
示例 1:
输入: a = 1, b = 2
输出: 3
示例 2:
输入: a = -2, b = 3
输出: 1
解题思路1:
加入列表中,然后求和即可
代码1:
class Solution(object):
def getSum(self, a, b):
num = [a, b]
return sum(num)
s = Solution()
a = 2
b = 3
print(s.Add(a, b))
解题思路2:
利用"++"、"–"运算符
代码2:
int getSum(int a, int b){
if(a>0){
while(a--) b++;
}else{
while(a++!=0) b--;
}
return b;
}
解题思路3:
位运算中的加法
我们先来观察下位运算中的两数加法,其实来来回回就只有下面这四种:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0(进位 1)
仔细一看,这可不就是相同位为 0,不同位为 1 的异或运算结果嘛
异或和与运算操作
在位运算操作中,异或的一个重要特性是无进位加法。我们来看一个例子:
a = 5 = 0101
b = 4 = 0100
a ^ b 如下:
0 1 0 1
0 1 0 0
-------
0 0 0 1
a ^ b 得到了一个无进位加法结果,如果要得到 a + b 的最终值,我们还要找到进位的数,把这二者相加。在位运算中,我们可以使用与操作获得进位:
a = 5 = 0101
b = 4 = 0100
a & b 如下:
0 1 0 1
0 1 0 0
-------
0 1 0 0
由计算结果可见,0100 并不是我们想要的进位,1 + 1 所获得的进位应该要放置在它的更高位,即左侧位上,因此我们还要把 0100 左移一位,才是我们所要的进位结果。
那么问题思路为: a + b 的问题拆分为 (a 和 b 的无进位结果) + (a 和 b 的进位结果)
- 无进位加法使用异或运算计算得出
- 进位结果使用与运算和移位运算计算得出
- 循环此过程,直到进位为 0
代码3:
public class Solution {
public int getSum(int num1,int num2) {
while (num2!=0) {
int temp = num1^num2;
num2 = (num1&num2)<<1;
num1 = temp;
}
return num1;
}
}
本文介绍了一种在不使用+、-、*、/四则运算的情况下,实现两个整数相加的方法。通过分析位运算中的加法原理,提出了解题思路,包括利用异或和与运算操作实现无进位加法,并通过循环迭代处理进位,直至得到最终结果。代码示例展示了如何在Python中实现这一算法。
291

被折叠的 条评论
为什么被折叠?



