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

题目描述

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

思路:

  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;
   }
}
发布了105 篇原创文章 · 获赞 19 · 访问量 4967

猜你喜欢

转载自blog.csdn.net/jiohfgj/article/details/105019276