371. 两整数之和

本文介绍了一种在不使用+、-、*、/四则运算的情况下,实现两个整数相加的方法。通过分析位运算中的加法原理,提出了解题思路,包括利用异或和与运算操作实现无进位加法,并通过循环迭代处理进位,直至得到最终结果。代码示例展示了如何在Python中实现这一算法。

题目描述:

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

示例 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 的进位结果)

  1. 无进位加法使用异或运算计算得出
  2. 进位结果使用与运算和移位运算计算得出
  3. 循环此过程,直到进位为 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;
    }
}

题目来源:
https://leetcode-cn.com/problems/sum-of-two-integers/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值