LintCode——A+B问题

A+B问题:给出两个整数a和b,求他们的和,但不能使用+等数学运算符.

注意事项:

1、A与B是32位整数

2、可使用位运算符

样例:如果 a=1 并且 b=2,返回3

一、非递归

 1 public class Solution {
 2     /**
 3      * @param a: An integer
 4      * @param b: An integer
 5      * @return: The sum of a and b 
 6      */
 7     public int aplusb(int a, int b) {
 8         // write your code here
 9         int c = 0,d = 0;  
10         while((a&b) != 0){//a和b之间有进位   
11             c = a^b;     //忽略进位相加   
12             d = (a&b)<<1;//应该进位的值   
13             a = c;  
14             b = d;  
15         }  
16         return a|b;//接返回两者|值  
17     }
18 }

二、递归

 1 public class Solution {
 2     /**
 3      * @param a: An integer
 4      * @param b: An integer
 5      * @return: The sum of a and b 
 6      */
 7     public int aplusb(int a, int b) {
 8         // write your code here
 9         if((a&b)==0)
10             return a|b;//接返回两者|值
11         else
12             return aplusb(a^b,(a&b)<<1);
13     }
14 }

猜你喜欢

转载自www.cnblogs.com/wangcj2015/p/9049861.html