本文主要是介绍剑指offer系列之四十七:不用加减乘除做加法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号
既然不能使用加减乘除,那么只剩下位运算和逻辑运算了。采用位运算的思路分为三步走:第一步,不进位对两个做异或运算(因为不考虑进位,1与1,0与0的异或运算的结果刚好是两者相加的结果);第二步,通过与运算得到两个数的进位值,因为只有1与1进行与运算的时候才会产生进位,所以产生的进位可以看成是两者先进行与运算再左移一位;第三步,把前两步的结果做与运算得到最后的结果。个人觉得这种思路是在是太赞了。OK,事就成了。下面是这种思路的实现代码(已被牛客AC):
package com.rhwayfun.offer;/*** 不使用操作运算符* * @author Administrator**/
public class CalcSumNoOperation {public int Add(int num1, int num2) {int sum = 0;int carray = 0;while(num2 != 0){sum = num1 ^ num2;carray = (num1 & num2) << 1;num1 = sum;num2 = carray;}return num1;}public static void main(String[] args) {int a = new CalcSumNoOperation().Add(2, 9);System.out.println(a);}
}
这篇关于剑指offer系列之四十七:不用加减乘除做加法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!