此题为不使用+ -号计算两个整型数字之和
思路一:使用++ --运算符
class Solution {
public:
int getSum(int a, int b) {
bool posflag=b>=0?true:false;
if(posflag)
{
for(int i=0;i<b;i++)
a++;
}
else
{
if(b==-2147483648)
{
for(int i=0;i<2147483647;i++)
a--;
a--;
}
else
{
b=-b;
for(int i=0;i<b;i++)
a--;
}
}
return a;
}
};
思路二:
使用异或计算两数之和,再将进位加上去
class Solution {
public:
int getSum(int a, int b) {
if(b==0)
return a;
int sum=a^b;
int carry=(unsigned int)(a&b)<<1;
return getSum(sum,carry);
}
};
举例说明运算过程
-3 + 1
-3的补码为 1111 1101
1的补码为 0000 0001
第一次运算
sum 1111 1100
carry 0000 0010
第二次运算
sum 1111 1110
carry 0000 0000
返回sum 该补码表示的为-2