描述
        写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
示例1
输入:1,2
返回值:3

方法一:C++自带累加函数
核心思想:
        利用C++自带的函数accumulate,它会计算容器所有元素的和。首先将这两个数据放入容器中,然后使用该函数进行计算。

核心代码:

int Add(int num1, int num2){
    vector<int> v = {num1,num2};
    return accumulate(v.begin(),v.end(),0);
}

复杂度分析:
        C++里面的accumulate函数是累计容器中的所以的值,由于引入容器中的元素为常量,因此时间复杂度为O(1)。由于引入的额外数组大小为常量,因此空间复杂度也为O(1)
时间复杂度O(1)
空间复杂度O(1)

方法二:移位异或运算
核心思想:
        利用异或、与和移位运算。首先可以简单的回顾一下基本运算操作关系。
与运算(&):0&0=0;0&1=0;1&0=0; 1&1=1;
或运算(|): 0|0=0;0|1=1;1|0=1;1|1=1;
或运算(^):0^0=0;0^1=1;1^0=1;1^1=0;

1)两个数做^运算,得到各位相加不进位的计算结果
2)两个数做&运算,得到进位。因为进位是要加到左一位的,所以需要左移1
3)将操作后的数据相加即可

图解:
举例:
5+7 = 12
图片说明

核心代码:

int Add(int num1, int num2) {
    int sum = num1 ^ num2, c = (num1 & num2) << 1;
    return sum + c;
}

复杂度分析:
        直接求值发,一次执行即可,因此时间复杂度为O(1)。由于没有引入额外的数组,因此空间复杂度也为O(1)
时间复杂度O(1)
空间复杂度O(1)