我是靠谱客的博主 个性大雁,最近开发中收集的这篇文章主要介绍leetcode-371. 两整数之和刷题笔记(c++),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

写在前面

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

题目详情

不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a 、b ​​​​​​​之和。

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

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

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++实现)

最后

以上就是个性大雁为你收集整理的leetcode-371. 两整数之和刷题笔记(c++)的全部内容,希望文章能够帮你解决leetcode-371. 两整数之和刷题笔记(c++)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部