A+B问题

白诗秀儿 关注

收藏于 : 2017-11-22 10:20   被转藏 : 1   

 

题目地址

不用加号计算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即可;代码如下:

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));
        }
    }
}

 

 阅读文章全部内容  
点击查看
文章点评
相关文章
白诗秀儿 关注

文章收藏:1308

TA的最新收藏