题目:
1. 标题:另类加法 | 时间限制:3秒 | 内存限制:32768K | 语言限制:[Python, C++, C#, Java] 请编写一个函数,将两个数字相加。不得使用+或其他算数运算符。
给定两个int A和B。请返回A+B的值
测试样例:
1,2
返回:3
解题思路:
代码展示:
class Solution { public:
int sum = 0;
int tmp=0;
int Add(int num1, int num2) {
if (num2 == 0){
return num1;
}
else{
//第一步,相加不进位
sum = num1 ^ num2;
//第二步,求得进位的值
tmp = (num1 & num2) << 1;
//第三步,sum和tmp相加
return Add(sum, tmp);
}
}
非递归版本↓
//非递归版:
/*
*两个数异或:相当于每一位相加,而不考虑进位;
*两个数相与,并左移一位:相当于求得进位;
*将两个新得到的数进行add操作,得到的结果和原本两个数相加相同,
*这样会把num2变得越来越小,知道为0是,则两个数的和直接就变成num1.
*/
int Add(int num1, int num2)
{
while (num2 != 0)
{
int temp = num1^num2;
num2 = (num1&num2) << 1;
num1 = temp;
}
return num1;
}