概述
写在前面
- 异或、移位运算
- 有思路可能得分
- 没思路1分估计也得不到
题目详情
不使用运算符 + 和 - ,计算两整数 a 、b 之和。
示例 1:
输入: a = 1, b = 2
输出: 3
示例 2:
输入: a = -2, b = 3
输出: 1
ac代码
- 解题思想
- a、b 2个整数相异或(^)表示a/b无进位相加
- 无进位相加指的是每1个对应的二进制位相加时都没有进位
- a & b 是相加产生的进位
- a、b 2个整数相异或(^)表示a/b无进位相加
class Solution
{
public:
int getSum(int a, int b)
{
while(b)
{
auto c = ((unsigned int)a & b) << 1;
a = a ^ b;
b = c;
}
return a;
}
};
- AddressSanitizer
- Address Sanitizer(ASan)是一个快速的内存错误检测工具
- AddressSanitizer 工具,会对有符号数的左移位操作做保护,强制转成无符号数做移位可绕过
或者
class Solution {
public:
int getSum(int a, int b) {
unsigned int sumNoCarry = a ^ b; //求a与b无进位的和
unsigned int carry = a & b; //求a与b的进位
if(carry != 0) //当进位为零的时候就结束了
return getSum(sumNoCarry, carry << 1);、
return sumNoCarry;
}
};
- 参考文章
- Leetcode刷题64-371. 两整数之和(C++详细解法!!!)
- LeetCode371.两整数之和(C++实现)
最后
以上就是个性大雁为你收集整理的leetcode-371. 两整数之和刷题笔记(c++)的全部内容,希望文章能够帮你解决leetcode-371. 两整数之和刷题笔记(c++)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复