您的位置:首页 > 其它

LintCode A+B问题

2018-03-01 22:14 183 查看
题目描述:给出两个整数a和b, 求他们的和, 但不能使用 
+
 等数学运算符。
解题思路:

考虑使用位运算。
首先考虑十进制加法中,如8+15:
1、不考虑进位:各位相加:个位得8+5=13,个位为3;十位得0+1=1;结果为13
2、考虑进位:个位进位为10
3、1和2中的结果相加得13+10=23
按照上述思想考试二进制加法中:如1000+1111
1、不考虑进位:各位相加:1+1=0,1+0=1,0+1=1,0+0=0,与位运算中的亦或操作相同 a^b
2、考虑进位:显然只有1+1会出现进位,相对于这位的进位为10,即把与运算的结果往左移一位 (a&b)<<1
3、1和2中的结果相加直到不产生进位
特别注意的是 “&”和“+”的优先级!

代码如下:class Solution {
/*
* param a: The first integer
* param b: The second integer
* return: The sum of a and b
*/
public int aplusb(int a, int b) {
// write your code here, try to do it without arithmetic operators.
if(a==0) return b;
if(b==0) return a;
int x1,x2;
x1=a^b;
x2=(a&b)<<1;
return aplusb(x1,x2);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: