題目:寫一個函數(shù),求兩個整數(shù)之和,要求在函數(shù)體內(nèi)不得使用+、-、*、/四則運(yùn)算符號。
練習(xí)地址
https://www.nowcoder.com/practice/59ac416b4b944300b617d4f7f111b215
https://leetcode-cn.com/problems/bu-yong-jia-jian-cheng-chu-zuo-jia-fa-lcof/
參考答案
把計算分成三步:第一步各位相加但不計進(jìn)位;第二步記下進(jìn)位;第三步把前兩步的結(jié)果相加,相加的過程依然是重復(fù)前面兩步,直到不產(chǎn)生進(jìn)位為止。
下面是一段基于循環(huán)實(shí)現(xiàn)的參考代碼:
public class Solution {
public int Add(int num1, int num2) {
int sum = num1;
while (num2 != 0) {
sum = num1 ^ num2;
num2 = (num1 & num2) << 1;
num1 = sum;
}
return sum;
}
}
復(fù)雜度分析
- 時間復(fù)雜度:O(1),最差情況下需循環(huán) 32 次。
- 空間復(fù)雜度:O(1)。