50.不用加减乘除求和

题目描述:

  写一个函数,两个整数的和,要求在函数体内不能使用加减乘除四则运算符。

思路分析:

比如如何得到15+7=22这个结果。

  第一步:我们做各位的相加,不进位,得到12.

  第二步:做进位,5+7有进位,进位是10。

  第三步:将前步进行相加得到最后的结果22。

  题目要求我们不能使用加减乘除,那么我们还能想到的运算就是位运算,在二进制中各位相加不进位可以用异或操作来代替,求进位的时候,可以将两数相与,然后左移一位。因为对于0加0,0加1,1加0,都不会产生进位,只有1加1的时候会产生一个向前的进位,所以与后左移一位。最后将前两步的结果求和,这将会是重复前两步的操作,当不产生进位时,就会得到结果。

代码:

public class Test{
    public int sum(int sum1,int sum2){
        while(sum2!=0){ //没有进位就退出
            //第一步:对各位不进位相加
            int temp=sum1^sum2;
            //第二步:求进位
            sum2=(sum1&sum2)<<1;  //产生的进位
            //第三步:求和,求和的过程是将前两步值相加,做法就是重复前两步
            sum1=temp;
        }
        return sum1;
    }
}
posted @ 2019-05-28 10:18  yjxyy  阅读(296)  评论(0编辑  收藏  举报