标签:01 num1 num2 int day27 异或 加法 进位 加减乘除
学习目标:
目标:熟练运用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);//将进位的数字和不进位的数字进行相加
}
}
标签:01,num1,num2,int,day27,异或,加法,进位,加减乘除 来源: https://blog.csdn.net/zhangxxin/article/details/117264652
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。