Calculate the sum of two integers a and b,but you are not allowed to use the operator +
and -
.
Example:
Given a = 1 and b = 2, return 3.
Credits:
Special thanks to @fujiaozhu foradding this problem and creating all test cases.
这题真的是奇葩,不用加号做加法,要怎么做呢
这题不让用加好,做加法,因为不让用加好,因此只能考虑使用其他的符号做加法了。
这里可以使用的是^号和&号
每一次sum=a^b,则sum是a+b减去进位的值,carry=(a&b)<<1,carry是减去的那个进位的值,a和b真正的和为sum+carry,但是由于不能使用加号,因此把a=sum和b=carry继续以上操作,直到carry=1,那么这个时候sum就是最终的结果,可以证明,这个算法一定可以在某一步得到结果,并不会无限循环
class Solution {
public:
int getSum(int a, int b) {
int sum;
while (b != 0)
{
sum = (a^b);
b = (a&b) << 1;
a = sum;
}
return sum;
}
};