提示
LintCode中的相关算法题实现代码,可以在我的GitHub中下载。
题目要求
LintCode的第一题,A+B问题,这里要求不能使用+运算符来进行求解。
主要的解题思路
考虑到不能使用+运算符来解决这道题,我们可以想到位运算。我们首先来看一下例子
5+7的运算过程如下
5对应的二进制代码:101.
7对应的二进制代码:111
5+7的运算结果是12,对应的二进制代码是1100
我们可以将这个过程分解为三步:
第一步:将每一个位数相加,这里不考虑进位,那么得到的运算结果是10
第二步:记下相加的进位,运算的结果是1010
第三步:将上述两步相加,就可以得出结果1100
在上面的第一部中,第一步我们可以使用异或进行运算,第二步是&操作,那么我们可以写下如下的代码:
public class Solution {
/**
* @param a: An integer
* @param b: An integer
* @return: The sum of a and b
*/
public int aplusb(int a, int b) {
// write your code here
int sum,t;
do{
sum=a^b;
t=(a&b)<<1;
a=sum;
b=t;
}while(b!=0);
return a;
}
}