赞
踩
给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。
由于不能适用+等运算符,根据提示,应该用位运算来完成。
异或运算(^)可以模拟一种不进位加法,比如:10^11=01,每一位的加法就相当于该位相加,但不进位。接下来的问题就是如何解决进位问题!由于异或运算仅仅是忽略了进位,那么每次有进位发生时,异或运算相当于忽略了高位的一个1。
按位与(&)运算可以帮助我们判断该位是否有进位,如10&11= 10,得到的1就是需要进位的位。由于加法进位是加在高位上的,所以很自然的想到了把与运算的结果往左移一位,再和异或结果相加,即为最后结果。
/*
* param a: The first integer
* param b: The second integer
* return: The sum of a and b
* Notice: You should not use + or any arithmetic operators.
* Example: Given a=1 and b=2 return 3
*/
#include<iostream>
using namespace std;
class Solution
{
public:
int aplusb(int a, int b)
{
if(b == 0)
return a;
else
return aplusb(a^b, (a&b) << 1 );
}
};
int main()
{
Solution so;
cout<<"2+3="<<so.aplusb(2, 3) <<endl;
cout<<"100+50="<<so.aplusb(100, 50) <<endl;
system("pause");
return 0;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。