371. 两整数之和
1. 题目
不使用运算符 +
和 -
,计算两整数 a
、b
之和。
示例 1:
输入: a = 1, b = 2 输出: 3
示例 2:
输入: a = -2, b = 3 输出: 1
2. 分析
在不采用加法和减法的前提下计算两整数之和,这需要使用与运算符和异或运算符,首先,利用与运算 a & b,计算出 a 和 b 所有进位的位置,然后将其左移一位,这样可以得到所有需要进位的值进位后最终的位置。然后利用异或运算 a ^ b,由于异或运算下相同位为0,不同位为1,所以可以获取到 a + b 的不进位下的值。其次,如果是涉及到负数的加法,由于计算机运算都是采用补码,正数的补码为它本身,负数的补码为其取反再加一,符号位不变,所以负数的加法在计算机底层实现的时候与正数的加法是一致的。
举个例子,6 + 3,转换成二进制就是 110 + 011,计算出需要进位的值 carry 为 (a & b) << 1 = 100, 不需要进位的值 nocarry 为 a ^ b = 101,首先需要判断 carry 和 nocarry 之间相加的情况是否会产生进位,即求出 carry & nocarry 的值是否为 0, 不为 0 的话说明需要再次进位,100 & 101 = 100 不为 0,所以先保存 nocarry 的值到 tmp ,再重新计算 nocarry 的值 即 nocarry = carry ^ nocarry ,然后计算新的 carry 值 carry = tmp & carry,然后再对新的 carry 和 nocarry 进行之前的判断,直到 carry 值为 0,这时返回nocarry即可。
3. 实现
class Solution { public:int getSum(int a, int b) {int sum = a ^ b;int carry = ((unsigned int)a & b) << 1;while(carry != 0){int tmp = carry;carry = ((unsigned int)sum & carry) << 1;sum ^= tmp;}return sum;} };
转载于:https://www.cnblogs.com/lawliet12/p/10800905.html
371. 两整数之和相关推荐
- LeetCode 371. 两整数之和(异或操作) / 639. 解码方法 II(动态规划)/ 437. 路径总和 III
371. 两整数之和 2021.9.26 每日一题 题目描述 给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和. 示例 1: 输入:a = 1, b = 2 ...
- leetcode 371. 两整数之和
leetcode 371. 两整数之和 不使用运算符 + 和 - ,计算两整数 a .b 之和. 示例 1: 输入: a = 1, b = 2 输出: 3 示 ...
- LeetCode【位运算】371. 两整数之和
不使用运算符 + 和 - ,计算两整数 a .b 之和. 示例 1: 输入: a = 1, b = 2 输出: 3 示例 2: 输入: a = -2, b = ...
- LeetCode 371. 两整数之和(位运算加法)
1. 题目 不使用运算符 + 和 - ,计算两整数 a .b 之和. 示例 1: 输入: a = 1, b = 2 输出: 3示例 2: 输入: a = -2 ...
- leetcode 371. 两整数之和(不用算术运算符实现两个数的加法:按位异或原理)
题目 https://leetcode-cn.com/problems/sum-of-two-integers/ 题解 按位异或:相同为0,不同为1 对于二进制的加法运算,若不考虑进位,则 1+1=0 ...
- leetcode 371. Sum of Two Integers | 371. 两整数之和(补码运算)
题目 https://leetcode.com/problems/sum-of-two-integers/ 题解 根据 related topics 可知,本题考察二进制运算. 第一次提交的时候,没想 ...
- LeetCode刷题实战371:两整数之和
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...
- 不使用 + 和 - 运算符计算两整数之和
问题概述 不使用运算符 + 和 -,计算两整数之和 思考 不使用 + 和 - ,那就只能想到用位运算来处理了.思路如下: 两数进行 ^(异或运算),可以得到两个数在相同位上数值不同的相加结果 两数进行 ...
- ★LeetCode(371)——两整数之和(JavaScript)
不使用运算符 + 和 - ,计算两整数 a .b 之和. 示例1: 输入: a = 1, b = 2 输出: 3 示例2: 输入: a = -2, b = 3 ...
最新文章
- 关于数据中台的深度思考与总结(超级干货)
- 图片浏览(CATransition)转场动画
- HttpClient ||GET请求||带参数的GET请求
- QT的QOpenGLTexture类的使用
- Unity教程之-UGUI美术字体的制作与使用
- SAP UI5的support Assistant
- JavaIO流加解密,AES对字符串加解密
- python字符串查找某个字符_python的字符串
- less 、more 翻页显示文件内容
- IIS_设置64位机器上的(IIS6/IIS7)兼容32位程序
- 作为公共组软件工程师如何工作
- SpringMvc从入门到入魔
- 沧小海基于xilinx srio核的学习笔记之第五章 Rapidio协议详述
- python工具方法 10 h5py批量写入文件、读取文件,支持任意维度的数据
- 水星usb无线网卡MW150US驱动 for Mac
- 记录人生第一个网站,以及相对路径图片无法显示的问题
- 安得与君相决绝,免教生死作相思
- Could not find parameter map
- 内核I2C子系统详解
- Python语言程序设计基础科学计算与可视化小练习