题目分析:[[EVD]] - 剑指 Offer 65. 不用加减乘除做加法
https://leetcode-cn.com/problems/bu-yong-jia-jian-cheng-chu-zuo-jia-fa-lcof/solution/
简单描述:
- 写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
限制🚫
- a, b 均可能是负数或 0
- 结果不会溢出 32 位整数
示例:
输入: a = 1, b = 1
输出: 2
解题思路:
思路:
- #位运算 使用异或^、与&运算符
- ⚠️c++负数位移在leetcode环境中无法通过,而g++可行,但建议位移时转换为无符号,避免极端数值时出错
效率:
- 时间复杂度
- 空间复杂度
代码:
class Solution
{
public:
/*循环用于解决,进位的进位问题(累加进位).*/
int add(int a, int b)
{
while (b != 0)
{
//此处强转为无符号类型
int c = (unsigned int)(a & b) << 1;
a ^= b;
b = c;
}
return a;
}
};