本文主要是介绍LeetCode 题1: A+B求和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述:
给出两个整数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;elsereturn 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;
}
这篇关于LeetCode 题1: A+B求和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!