A+B问题_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > A+B问题

A+B问题

 2017/11/16 1:03:24  陶永攀  程序员俱乐部  我要评论(0)
  • 摘要:题目地址不用加号计算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;所以我们进行递归操作,进了几次位就进行多少次递归
  • 标签:问题

?

题目地址

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

?

发表评论
用户名: 匿名