写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
示例:
输入: a = 1, b = 1
输出: 2
提示:
a, b 均可能是负数或 0
结果不会溢出 32 位整数
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/bu-yong-jia-jian-cheng-chu-zuo-jia-fa-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
1、不准用+、-、*、/,第一反应位运算
2、位运算中,与运算会产生进位,不考虑加法,将a与b的结果左移1位后存入carry,因为越界的问题,将结果先强制转换为unsigned int再存入carry
3、异或运算能实现加法,不考虑进位,所以将a^b的结果存入sum
4、当carry不为0的时候,循环运算,直到b为0,返回carry加上sum的结果a
class Solution {
public:
int add(int a, int b) {
int sum,carry;
while(b!=0)
{
sum=a^b;
carry=(unsigned int)(a&b)<<1;
a=sum;
b=carry;
}
return a;
}
};