A+B问题

作者: Taoyongpan | 来源:发表于2017-12-05 22:03 被阅读61次

    不用加号计算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问题

        本文链接:https://www.haomeiwen.com/subject/yqshixtx.html