题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
解题思路
依据题目意思,不能使用加减乘除,就对数字进行二进制位运算来求结果。我们举一个例子:5+7=12,第一步:逐位相加进行不进位运算,得出各位为2.第二步:算出进位为10,如果第一步进位为零,那么第一步相加即为最后结果!第三步,重复上述两个步骤即可,直到进位为0则停止计算!同样在二进制中思路与上述类似:第一步5的二进制为0101,7的二进制为0111,进行不进位运算得0010,类似于异或运算0101^0111,第二步,计算进位,进位为1010,相当于两个二进制数进行逐位与运算再左移一位(0101&0111)<<1,第三步,重复上述步骤,直到进位为0!即得出最终计算结果。
代码实现
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
public class add {
//不用加减乘除法进行加法运算
public int add_int(int num1,int num2){
if (num2==0){
return num1;
}
int sum,carry;
while (num2!=0){//直到进位为0,结束
sum=num1^num2;//非进位计算
carry=(num1&num2)<<1;//进位部分
num1=sum;
num2=carry;
}
return num1;
}
public static void main(String[] args) {
add test=new add();
int result=test.add_int(15,7);
System.out.println(result);
}
}
总结
本题来源于面试经典教材《剑指offer》中 归属于其他类型题目。
同许多在算法道路上不断前行的人一样,不断练习,修炼自己!
如有博客中存在的疑问或者建议,可以在下方留言一起交流,感谢各位!
最后,感谢AIAS!
觉得本博客有用的客官,可以给个赞鼓励下! 嘿嘿