題目描述
寫一個函數,求兩個整數之和,要求在函數體內不得使用+、-、*、/四則運算符號。
代碼
//方法一,按位比較,一步一步計算
class Solution {
public:
int Add(int num1, int num2)
{
int ret=0;
int flag=0;//進位標誌
for(int i=0;i<32;i++)
{
if((num1&(0x01<<i))^(num2&(0x01<<i)))
{
if(flag==1)
{
flag=1;//產生進位信號
}
else
ret=ret|(0x01<<i);
}
else
{
if(flag==1)
{
ret=ret|(0x01<<i);
flag=0;//進位完成
}
if((num1&(0x01<<i)))//兩個都爲1
{
flag=1;
}
}
}
return ret;
}
};
//法二 把進位和不進位的值分開,然後不斷迭代,直到沒有進位,說明加法結束
class Solution {
public:
int Add(int num1, int num2)
{
int sum;//和
int carry;//進位
do
{
sum=num1^num2;
carry=(num1&num2)<<1;//得到進位值
num1=sum;
num2=carry;
}
while(num2!=0);//無進位了就停止相加
return sum;
}
};