0
点赞
收藏
分享

微信扫一扫

leetcode-371. 两整数之和刷题笔记(c++)


写在前面

  • 异或、移位运算
  • 有思路可能得分
  • 没思路1分估计也得不到

题目详情

不使用运算符 + 和 - ,计算两整数 ab 之和。

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

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

ac代码

  • 解题思想
  • a、b 2个整数相异或(^)表示a/b无进位相加
  • 无进位相加指的是每1个对应的二进制位相加时都没有进位
  • 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++实现)


举报

相关推荐

0 条评论