A+B问题

不用加号计算A+B,我们用异或运算和与运算以及位运算来实现同等的操作,A^B的二进制异或运算,相当于没有进位的加号运算;例如 A=10,B=11;A^B = 10,而A+B的值为110,所以相比来说少了一个进位,我们要做的就是 用与运算和移位运算来实现,A&B = 10,A&B>>1 = 100; (AB)(A&B>>1) =110,(A^B)&(A&B>>1)=0;
所以我们 进行递归操作,进了几次位就 进行多少次递归,直至B这一项变为0,范围A即可;
题目地址

代码如下:

package lintcode;  
  
import java.util.Scanner;  
  
/** 
 * Created by Taoyongpan on 2017/11/15. 
 * 求A+B的和,不能运用加号,A,B都是int型 
 */  
public class SumAB {  
  
    public static int sum(int a,int b){  
        if (a==0){  
            return b;  
        }  
        if (b==0){  
            return a;  
        }  
        return sum(a^b,(a&b)<<1);  
    }  
    public static void main(String[] args){  
        Scanner sc = new Scanner(System.in);  
        while (sc.hasNext()){  
  
            int a = sc.nextInt();  
            int b = sc.nextInt();  
  
            System.out.println(sum(a,b));  
        }  
    }  
}  

你可能感兴趣的:(A+B问题)