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