学习目标:
目标:熟练运用Java所学知识
学习内容:
本文内容:使用java解决 不用加减乘除做加法
文章目录
题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
示例1
输入 1,2
输出 3
解题思路
题目既然要求了不能用加减乘除,那么可以对两个数字进行操作的就只有位运算了
- 当我试了所有的位运算之后发现异或(^)运算可以实现不进位的加法
(如果相加的数字不需要进位,则此时就是我们需要的结果,可是很明显是需要进位的,因为两个二进制的最高位都是1)
- **与(&)**操作可以得到进位
但是得到的是每一位对应的进位,最高位是1代表需要进1,第二位是0,代表不用进位
而进位是需要向高位进一位,所以我们需要将与操作得到的结果左移一位,然后和异或得到的结果进行相加
此时我们会发现问题已经由原先的num1+num2转变成了将与操作再左移一位和异或操作得到的两个数字再次进行相加操作,那么也就是需要进行递归,而递归的退出条件也很明显,就是我第一步提到的两个数相加不需要进位,也就是 与操作得到的结果是0
实现代码
public class Solution {
public int Add(int num1,int num2) {
if((num1&num2)==0){
//进位为0,则直接返回不进位加法的结果
return num1^num2;
}
int temp1=num1^num2;//异或,得到不进位的加法
int temp2=num1&num2;//与,得到进位信息
temp2<<=1;//将与得到的进位左移一位
return Add(temp1,temp2);//将进位的数字和不进位的数字进行相加
}
}