经典算法 | 不用加号做加法

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;
}
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值