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);
}
};
+等数学运算符。
解题思路:
考虑使用位运算。
首先考虑十进制加法中,如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);
}
};
相关文章推荐
- Lintcode:Fizz Buzz 问题
- LintCode_1_A + B 问题
- LintCode 1. A + B 问题
- 排颜色问题——数组 leetcode lintcode
- Lintcode:A + B 问题
- LintCode_001_A+B问题
- lintcode fizz buzz问题
- lintcode-背包问题-92
- LintCode_001_A+B问题
- Lint-code 用栈模拟汉诺塔问题
- lintcode backpack 背包问题
- LintCode :背包问题
- LintCode 关于排序问题的总结
- lintcode 子数组问题(最全的面试子数组问题)
- lintcode(399)Nuts 和 Bolts 的问题
- LintCode之1 A+B问题
- lintcode A+B问题
- lintcode 二叉树的层次遍历系列问题 -解决方法和领会
- LintCode 链表求和 问题解答
- LintCode编程题:吹气球问题