1. 程式人生 > >給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。

給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。

記錄自己坑了又坑的每一天:

原題:

給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。

返回被除數 dividend 除以除數 divisor 得到的商。

示例 1:

輸入: dividend = 10, divisor = 3
輸出: 3

示例 2:

輸入: dividend = 7, divisor = -3
輸出: -2

說明:

  • 被除數和除數均為 32 位有符號整數。
  • 除數不為 0。
  • 假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231,  231 − 1]。本題中,如果除法結果溢位,則返回 231 − 1。

以下為解答:

(1)、首先咱們要換一個操作來想,將除法考慮為減法,回到原始;

(2)、接下來就要分各種情況了,如果不分情況處理,有的示例會超時的:

    1、被除數 = 除數    帶符號返回1;

    2、被除數 < 除數    返回0;

    3、除數 = 1     帶符號返回被除數;

    4、除數 = 2    右移被除數(使用右移符號)(在沒考慮到這一步時,其中一個測試超時);

    5、其他除數     定義一個迴圈,首先要讓被除數減去除數,並且要記錄下減法操作的次數,接下來在每次進行減法操作時,都要讓除數左移一位,相當於 除數*2,如果被除數已經小於除數,就要重新將除數賦值為原始值,在依次進行減法操作,迴圈結束的條件為  被除數  <  除數,在將結果進行返回時要判斷結果是否超出範圍。