欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

剑指offer 47:不用加减乘除做加法

程序员文章站 2022-07-10 20:22:32
...

题目描述

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

思路:

  1. 第一步求出两个异或得出的个位,比如5+7=12 求出2
  2. 第二步相与然后左移一位,会得到1010,也就是10,但是不能用加法,所以还是要继续
  3. 用2和10再异或会得到8,再2和10相与再左移一位会得到4,这时候就发现规律了,操作和第一次一样但是得到的两个数如果按照加法仍然是12,所以这时候我们不难猜出,当其中一个数为0的时候另一个数就会为12,也就是原本5+7该返回的数,返回即可
public class Solution {
   public int Add(int num1,int num2) {
    while( num2!=0 ){
        int sum = num1 ^ num2;
        int carray = (num1 & num2) << 1;
        num1 = sum;
        num2 = carray;
    }
    return num1;
   }
}
相关标签: java算法