写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
class Solution {
public:
int Add(int num1, int num2)
{
int carry = 0;
int flag = 0x1;
int result = 0;
while (flag <= num1 || flag <= num2 || carry == 1){ //1<=1 || 1<=2
int bitNum1 = num1 & flag;
int bitNum2 = num2 & flag;
if (carry == 0){
if (bitNum1 && bitNum2)//都是1 进位
{
carry = 1;
int temp = result;
result &= flag;
result = temp;
}
else if (bitNum1 || bitNum2){// 一个0 一个 1
carry = 0;
result |= flag;
}
else{//全是0
carry = 0;
int temp = result;
result &= flag;
result = temp;
}
}
else if (carry == 1){
if (bitNum1 && bitNum2)//都是1 进位
{
carry = 1;
result |= flag;
}
else if (bitNum1 || bitNum2){// 一个0 一个 1
carry = 1;
int temp = result;
result &= flag;
result = temp;
}
else{//全是0
carry = 0;
result |= flag;
}
}
flag <<= 1;
}
return result;
}
};
提交结果:运行超时 运行时间:1001ms 占用内存:0KB 使用语言:C++ 用例通过率:0.00%
class Solution {
public:
int add(int num1, int num2)
{
int sum, res;
while (num2)
{
sum = num1^num2;//异或
res = (num1&num2) << 1;//判断是否有进位
num1 = sum;
num2 = res;
}
return num1;
}
};
提交结果:答案正确 运行时间:4ms 占用内存:484KB 使用语言:C++ 用例通过率:100.00%