不用加号计算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));
}
}
}
网友评论