Divide Two Integers 的兩種解法

2021-08-01 06:10:29 字數 1441 閱讀 6206

divide two integers without using multiplication, division and mod operator.

if it is overflow, return max_int.

解題思路:

1. 通過被除數減去除數來得到被除數中包含多少個除數,一直減到被除數小於等於 0 則計算完成;

2. 如果是乙個很大的被除數除以很小的除數,那麼必然會超時(如 0x7fffffff 除以 1 ,每次減 1 要減 20 億次);

3. 為加速進行減法,每減一次除數,都將除數加倍,相應得本次除數包含的原始除數的個數是上一次除數包含的原始除數的個數的 2 倍;

4. 當被除數減到正好為零時,就正好得到結果;

5. 當被除數小於零時,判斷當前的除數是否是原始的除數,如果是,那麼說明被除數已經被減完,餘下的部分已經不足以除以原始除數,所以直接返回結果;

6. 如果當前除數不是原始除數,那麼說明除數剩餘的本分還能夠被原始除數除;

7. 在 6 步的情況下,求解新的被除數除以除數的問題和原始的問題是乙個問題(問題規模減小了),所以此時可以進行遞迴求解(第一種方法),也可以非遞迴求解(第二種解法);

8. 問題還需要注意的地方有:

a. 若除數為 0 ,則直接返回無窮大((int)0x7fffffff);

b. 若結果溢位,則返回相應的正的最大值((int)0x7fffffff)或負的最大值((int)0x80000000);

完整**:

遞迴解法:

#include

#include

#include

#include

#include

#include

using namespace std;

#define max_int (int)0x7fffffff

#define min_int (int)0x80000000

class solution

private:

long long func(long long dividendll, long long divisorll)

else

divisorll = divisorll << 1;

time = time << 1;

}return count + func(dividendll+divisorll,divisorback);}};

void main()

else if(dividendll == 0)

else}}

count = ((f == '+')?count:-count);

if(count > max_int) count = max_int;

if(count < min_int) count = min_int;   

return count;}};

void main()

PL SQL Developer過期的兩種解決方法

方法一 1.首先,登陸pl sql developer,pl sql developer要到期了 2.輸入指令 regedit 程式設計客棧開啟登錄檔,如圖所示 3.然後,在登錄檔裡按hkey current user software allround automations 這個路徑找到 all...

TCP中recv解阻塞的兩種方式

1 收到客戶端傳送的資料 2 客戶端關閉了套接字,可以通過判斷收到資料的長度來判斷客戶端是否下線,長度為0代表已下線。1.在阻塞模式下send操作將會等待所有資料均被拷貝到傳送緩衝區後才會返回 如果傳送緩衝區可用大小為0或比要傳送的資料長度要小,則會阻塞,直到傳送緩衝區裡的資料被系統傳送後,可用緩衝...

springmvc靜態資源過濾問題,兩種解決方法

1.tomcat的專案路徑設定為 2.springmvc.xml設定靜態資源不過濾 設定靜態資源不過濾 resources css location resources css resources js location resources js resources images location ...