LeetCode里难度为简单
- 问题描述:写一个函数不用加减法将两个数相加
- 思路:开始想不用加法就用乘除,结果写到最后还是不得不用加减法。之后换了用两个补码相加思路
发现:两数之和=两数异或+两个数相与之和左移一位
方法一:(递归)
int getSum(int a, int b)
{
int sum1 = a^b;
int sum2 = (a&b) << 1;
if(sum2!=0) return getSum(sum1, sum2);
return sum1;
}
方法二:
int getSum(int a, int b) {
while(a != 0) {
int tmp = (a & b) << 1;
b = a ^ b;
a = tmp;
}
return b;
}
花费的时间上没有差异