diff --git a/problems/371.sum-of-two-integers.md b/problems/371.sum-of-two-integers.md index c6f90d08f..d95c2a1f6 100644 --- a/problems/371.sum-of-two-integers.md +++ b/problems/371.sum-of-two-integers.md @@ -43,6 +43,8 @@ Output: 1 - 求与之后左移一位来可以表示进位 ## 代码 +代码支持:JS,C++,Java,Python +Javascript Code: ```js /* * @lc app=leetcode id=371 lang=javascript @@ -62,4 +64,60 @@ var getSum = function(a, b) { return getSum(a ^ b, (a & b) << 1); }; ``` +C++ Code: +```c++ +class Solution { +public: + int getSum(int a, int b) { + if(a==0) return b; + if(b==0) return a; + + while(b!=0) + { + // 防止 AddressSanitizer 对有符号左移的溢出保护处理 + auto carry = ((unsigned int ) (a & b))<<1; + // 计算无进位的结果 + a = a^b; + //将存在进位的位置置1 + b =carry; + } + return a; + } +}; +``` +Java Code: +```java +class Solution { + public int getSum(int a, int b) { + if(a==0) return b; + if(b==0) return a; + + while(b!=0) + { + int carry = a&b; + // 计算无进位的结果 + a = a^b; + //将存在进位的位置置1 + b =carry<<1; + } + return a; + } +} +``` + +Python Code: +```python +# python整数类型为Unifying Long Integers, 即无限长整数类型. +# 模拟 32bit 有符号整型加法 +class Solution: + def getSum(self, a: int, b: int) -> int: + a &= 0xFFFFFFFF + b &= 0xFFFFFFFF + while b: + carry = a & b + a ^= b + b = ((carry) << 1) & 0xFFFFFFFF + # print((a, b)) + return a if a < 0x80000000 else ~(a^0xFFFFFFFF) +```