(leetcode算法题)371. 两整数之和

只使用 按位异或 和 按位与 和 左移操作,就能够实现两整数相加,不需要加减系列运算符

具体的原理如下,

首先a + b = (a ^ b) + ((a & b) << 1)

这是因为根据异或的定义,两个二进制数异或的结果实际上就是这两个数按照竖式计算时无进位相加的结果

而(a & b) << 1 就是两个数相加时产生的进位按位放置得到的结果,比如以103104 + 11408为例

0000 0000 0000 0000 0000 0001 0000 0000就是这两个数相加时会在第8位相加的时候因为产生了进位,而在第9位添加一个进位1

那么怎么来计算(103106 ^ 11408)+ ((103106 & 11408) << 1)?

还是使用相同的计算方法绕开 加法

即实现一个循环,直到进位为0时就可以结束循环

cpp 复制代码
class Solution {
public:
    int getSum(int a, int b) {
        while (b){
            int tmp1 = a ^ b;
            b = (a & b) << 1;
            a = tmp1;
        }
        return a;
    }
};
相关推荐
在风中的意志几秒前
[数据库SQL] [leetcode-175] 175. 组合两个表
数据库·sql·leetcode
圣保罗的大教堂1 分钟前
leetcode 1970. 你能穿过矩阵的最后一天 困难
leetcode
yugi9878387 分钟前
MFCC特征提取与SVM训练语音识别
算法·支持向量机·语音识别
yuanmenghao10 分钟前
MSAC 算法详解以及与 RANSAC 对比示例
算法·自动驾驶·聚类·ransac·msac·系统辨识‘
造夢先森10 分钟前
常见数据结构及算法
数据结构·算法·leetcode·贪心算法·动态规划
listhi52018 分钟前
基于蒙特卡洛方法处理电力系统负荷不确定性的解决方案
算法
iAkuya19 分钟前
(leetcode)力扣100 29删除链表的倒数第 N 个结点(双指针)
算法·leetcode·链表
@卞31 分钟前
01_树的 dfs 序
算法·深度优先
isyoungboy35 分钟前
洪水法实现Region RLE的fill_up算法
算法
2401_8414956438 分钟前
自然语言处理实战——基于BP神经网络的命名实体识别
人工智能·python·神经网络·算法·机器学习·自然语言处理·命名实体识别