题目描述

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

解题思路

一般来说题目限定了不得使用+、-、*、/四则运算符号,都可以考虑使用位运算,那么接下来就是如何使用位运算,来计算两个值的和,和的计算,包括进位以及各个位相加,那么可以将其分为两部,首先求各个位置的和,不带进位,再求进位,再相加直到没有进位为0即可以得到两数和

非递归 时间复杂度 O(1) 空间复杂度O(1)

  1. ^ 可以用来求两个数的和(不带进位)
  2. & 可以用来求进位
    // 时间复杂度 O(1) 空间复杂度O(1)
    public int Add(int num1,int num2) {
        // 当num2为0,表示没有进位,没有进位就表示计算完成
        while (num2 != 0) {
            // 求和
            int temp = num1 ^ num2;
            // 求进位
            num2 = (num1 & num2) << 1;
            // 把两数和赋值给num1
            num1 = temp;
        }
        return num1;
    }

举个例子

图片说明

递归 时间复杂度 O(1) 空间复杂度O(1)

    public int Add(int num1,int num2) {
        if(num2 == 0){
           return num1;
        }
        return Add(num1^num2, (num1&num2)<<1);
    }