您的位置:首页 > Web前端

剑指offer——不用加减乘除做加法

2016-07-21 14:34 218 查看

题目描述:

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

思路:

既然不能使用加减乘除,那么只剩下位运算和逻辑运算了。采用位运算的思路分为三步走:第一步,不进位对两个做异或运算(因为不考虑进位,1与1,0与0的异或运算的结果刚好是两者相加的结果);第二步,通过与运算得到两个数的进位值,因为只有1与1进行与运算的时候才会产生进位,所以产生的进位可以看成是两者先进行与运算再左移一位;第三步,把前两步的结果做与运算。然后一直重复,知道不产生进位为止。

代码实现:

public class Solution {
public int Add(int num1,int num2) {
int sum = 0;
int carry = 0;
while(num2!=0){
sum = num1^num2;
carry = (num1&num2)<<1;

num1 = sum;
num2 = carry;
}
return num1;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: