描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
数据范围:两个数都满足 0 \le n \le 10000≤n≤1000
进阶:空间复杂度 O(1)O(1),时间复杂度 O(1)O(1)
示例1
输入:1,2
返回值:3
示例2
输入:0,0
返回值:0
第一种解法
由于不能用四则运算符号,则只能考虑异或(^ 转换为二进制进行计算,从高位开始比较,相同则为0,相异则为1) 或者 与(& 转换为二进制进行计算,从开始开始比较,两个数都为1才为1 否则为0) 进行运算,num1 & num2) <<1判断是否存在进位操作。代码如下
public int firstAdd(int num1,int num2) {
if(num1 == 0 || num2 == 0){
return num1 ^ num2;
}
return firstAdd((num1 ^ num2) , (num1 & num2) <<1 );
}