[01] 两整数之和
admin
2024-05-02 06:34:53
0

371 两整数之和

    • 题目
        • 给你两个整数 a 和 b ,不使用 运算符 + 和 - ​​​​​​​,计算并返回两整数之和。
    • 题解思路
    • 魔鬼细节
        • 细节一
          • 解析
        • 细节二
          • 解析
        • 细节三
          • 解析
        • 细节四
          • 解析
    • 代码
        • 循环写法
        • 递归写法
    • 参考题解

题目

给你两个整数 a 和 b ,不使用 运算符 + 和 - ​​​​​​​,计算并返回两整数之和。

示例 1:

输入:a = 1, b = 2
输出:3
示例 2:

输入:a = 2, b = 3
输出:5

提示:

-1000 <= a, b <= 1000

来源:力扣(LeetCode)
链接: link.

题解思路

利用位运算来解决

魔鬼细节

细节一

a ^ b 表示无进位的求和部分
(a & b) << 1 表示只保留进位部分
所以可以用两部分加起来代替加法,但是不能用"+"实现,转用循环或递归,直到进位 (a & b) << 1 为 0 为止

解析

位运算: & | ^

二进制中: ① 1 + 1 = 10 用 (1 & 1) << 1 or (1 | 1) << 1;
② 1 + 0 = 1 用 1 | 0 or 1 ^ 0
③ 0 + 0 = 0 用 0 & 0 or 0 | 0 or 0 ^ 0

从这里发现 a | b 、 a ^ b 除了不能实现进位,其他都能实现,
但是 a | b 在①中会产生一个小尾巴 1,而 a ^ b 则不会,所以表示无进位的求和
又因为 0 & 上任何数都是 0,所以 (a & b) << 1 才能表示单纯地进位,而 (a | b) << 1 就不行

细节二

用循环或递归,直到进位 (a & b) << 1 为 0 为止

解析

(a & b) << 1 表示的是进位部分,那么随着不断拆分,这部分会变成 0 ,此时 a ^ b 部分就真正表示 a + b 的和了

细节三

可以使用无符号类型来防止溢出。

解析

在 C++ 的实现中,当我们赋给带符号类型一个超出它表示范围的值时,结果是 undefined;而当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模的余数。

细节四

循环写法中,对于语句顺序要把握好

解析

如果先写 a = a ^ b,再写 temp = …,这样就把初始的 a 改变了

代码

循环写法

class Solution {
public:int getSum(int a, int b) {while (b) {unsigned int temp = (unsigned int)(a & b) << 1;a = a ^ b;b =temp;}return a;}
};

递归写法

class Solution {
public:int getSum(int a, int b) {if(!a) return b;int sum = a ^ b, carry = (unsigned int)(a & b) << 1;return getSum(carry, sum);    }
};

参考题解

官方循环参考
https://leetcode.cn/problems/sum-of-two-integers/solution/liang-zheng-shu-zhi-he-by-leetcode-solut-c1s3/

递归参考
https://leetcode.cn/problems/sum-of-two-integers/solution/liang-zheng-shu-zhi-he-wei-yun-suan-qing-7095/

思路参考
https://leetcode.cn/problems/sum-of-two-integers/solution/javashi-pin-jiang-jie-xi-lie-sum-of-two-integers-b/

相关内容

热门资讯

嘉兴银行“新帅”确定:行长王芳... 嘉兴银行“新帅”确定:行长王芳升任党委书记 人民财讯5月19日电,据嘉兴银行消息,嘉兴市委常委、常务...
这届年轻人的置业逻辑变了!报告... 5月18日,58同城、安居客发布《2026青年置业报告》。这份基于数千名20-35岁年轻人的调研,揭...
金融让生活更美好|上银财富“5... 为更好地满足广大客户多元化、多层次的财富保值增值需求,上海银行于5月18日正式启动“518财富理想节...
追觅俞浩回应设立上百个BU:A... 来源:中国企业家 做企业不是开故事会,发展才能解释问题,发展才能解决问题 文|《中国企业家》记者 ...
原创 强... 2026年5月13日,深圳。华为和总资产1.5万亿的中国中化,正式签下一份深化战略合作协议。 一家...
金价,还在跌!警惕骗局—— 5月18日早盘,现货黄金短时下跌,失守4500美元/盎司,为3月底以来首次。 【此前报道:】5月19...
中国电信:选举柯瑞文为董事长;... 据每日经济新闻:5月19日,中国电信(601728.SH)公告称,公司第九届董事会第一次会议选举柯瑞...
2026第六届中国贵州国际能源... 5月18日,2026第六届中国贵州国际能源产业博览交易会(简称“贵州能博会”)在贵阳国际会议展览中心...
华为轮值董事长徐直军访问东风汽... 2026年5月19日,华为轮值董事长徐直军,华为公司高级副总裁、引望公司CEO靳玉志一行到访东风汽车...
20cm股热度渐升!涨停数追平... 财联社5月19日讯(编辑 梓隆),近期,创业板、科创板股热度较高,截至今日(5月19日)收盘,累计共...
原创 告... 1499,这个数字陪了我们好几年。买飞天茅台的人,对它太熟悉了。可就在3月30日晚上,贵州茅台一纸公...
美国30年期国债收益率升至20... 美国30年期国债收益率上升至5.177%,为2007年以来的最高水平。 (本文来自第一财经)
一人掌控2家国产存储龙头,57... 一个老板,左手握着国内芯片设计龙头兆易创新,右手攥着国产DRAM市场第一的长鑫科技,57亿关联交易深...
跟宇树一比,云深处太贵了? 营收仅宇树五分之一,估值倍数贵了约60%。 AIX财经(AIXcaijing)原创 作者|王汉星 编...
华曦达将在港交所上市:业绩波动... 来源|贝多商业&贝多财经 5月18日,深圳市华曦达科技股份有限公司(下称“华曦达”,HK:00901...
微纳星空科创板IPO拟募资50... 上交所&深交所 新 股 上 市 5月12日-5月18日,上交所无公司上市;深交所主板有2家公司上市。...
突发!伊朗股市,重新开市!特朗... 刚刚,伊朗股市恢复交易! 据央视新闻报道,当地时间5月19日,伊朗德黑兰证券交易所恢复股票交易。目前...
龙湖完成“21龙湖04”本息兑... 5月19日,龙湖集团如期完成“21龙湖04”的本金兑付与付息,涉及总金额约15.54亿元,包含本金1...
600759,连续12个跌停 【导读】市场情绪整体不错! 中国基金报记者 泰勒 大家好啊,今天的市场,尽管外围行情似乎风雨飘摇,但...