面试题47. 不用加减乘除做加法

来源:互联网 发布:和英国人谈恋爱知乎 编辑:程序博客网 时间:2024/04/28 12:46

面试题47. 不用加减乘除做加法

题目描述

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



思路:用位运算替代

首先不考虑进位,0+0=0,0+1=1,1+0=0,1+1=0,相当于“异或”运算
然后考虑进位,只有1+1=1,相当于“与”运算。当有进位时,需要左移1位。

下图以2+3为例,说明了位运算过程:

  • 第一步是“异或”,得到不考虑进位的结果
  • 第二步是“与”,然后左移1位,得到进位
  • 最后两者相加,这里需要使用递归。当进位为0时,递归结束。

这里写图片描述

public class Solution {    public static int Add(int num1, int num2) {             if(num2 == 0) { // 进位为0时,返回            return num1;        }        int num3 = num1 ^ num2; // 不考虑进位        int num4 = (num1 & num2) << 1; // 进位        return Add(num3, num4);     }}

这里写图片描述

原创粉丝点击