剑指offer-第六章面试中的各项能力(不用加减乘除做加法)

//不用加减乘除四则运算,来做加法
//题目:两个数做加法。
//思路:用二进制的位运算的思路。第一步:首先两数相加考虑进位。可以用异或。
//第二步:两个数相加只考虑进位,并将最后的结果左移.第三步:将第一二步的结果相加。
public class AddN {
    public int add(int a,int b){
        //递归实现
        int sum1=a^b;
        int sum2=(a&b)<<1;
        if(sum2!=0){
            return add(sum1,sum2);
        }
        /*循环实现
         * int sum1,sum2;
        do{
            sum1=a^b;
            sum2=(a&b)<<1;
            a=sum1;
            b=sum2;
        }while(b!=0);*/
        return sum1;
    }
    public static void main(String[] args){
        AddN add=new AddN();
        int sum=add.add(-1, 40);
        System.out.println(sum);
    }
}

 

posted @ 2015-08-31 20:24  lisahappy  阅读(175)  评论(0编辑  收藏  举报