您的位置:首页 > 职场人生

面试题47-不用加减乘除做加法

2018-04-04 10:58 253 查看
题目描述 
写一个函数,求两个整数之和,要求在函数体内不准用+、-、×、÷四则运算符号。
思路
将十进制加法分为三步:
1、各位相加,不进位。
2、计算进位。
3、将前两个结果加起来。
将十进制加法转为二进制加法,结果也是三步走。

1、各位相加,不进位。发现0加0、1加1的结果都是0,0加1、1加0的结果为1。这和异或一致,因此用异或代替。
2、计算进位。只有1加1会出现进位,因此可以将这一步想象成先做与运算,再左移一位
3、将前两个结果加起来。重复前两步,直到不产生进位为止。
代码: 
语言:Java 
public class Test47 {
public static void main(String[] args) {
int sum =  Add(99,88);
System.out.println(sum);
}
public static int Add(int num1,int num2) {
int sum ,carry;//和,进位
do{
sum = num1 ^ num2;//第一步:只加不进位(异或)
carry = (num1 & num2) << 1;//第二步:计算进位(与运算,再左移)

num1 = sum;
num2 = carry;//重复,将和与进位相加
} while(num2 != 0);
return num1;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  剑指offer