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