題目描述:寫一個函數,求兩個整數之和,要求在函數體內不能使用+、-、*、/ 四則運算符號。
解題思路:
- 使用位運算;
- 第一步相加不考慮進位,0加0、1加1的結果都是0;0加1、1加0的結果都是1,所以第一步是異或的結果;
- 第二步考慮進位,0加0、0加1、1加0都不產生進位;只有1加1會向前產生一個進位。
- 此時可以想象成是兩個數先位與運算,然後再做移1位。
- 最後將前兩個步驟的結果相加。但仍然要重複前面的兩步,知道不產生進位爲止。
測試用例:
int main(){
int num1 = 2;
int num2 = 3;
std::cout << Add(num1, num2); //Output: 5
return 0;
}
函數實現:
int Add(int num1, int num2){
//和,進位
int sum, carry;
do{
//第一步不考慮進位,異或操作
sum = num1 ^ num2;
//檢查進位
carry = (num1 & num2) << 1;
num1 = sum;
num2 = carry;
}while(num2 != 0);
return num1;
}