leetcode29. 兩數相除
阿新 • • 發佈:2019-01-03
給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。
返回被除數 dividend 除以除數 divisor 得到的商。
利用<< 左位移,相當於乘以2,>>右位移,相當於除以2
說明:
被除數和除數均為 32 位有符號整數。 除數不為 0。 假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231, 231 − 1]。本題中,如果除法結果溢位,則返回 231 − 1。 class Solution { fun divide(dividend: Long, divisor: Long): Long { if (divisor == 0L) { return 0 } val sign = if (dividend.xor(divisor).ushr(31) > 0) -1 else 1 var result = 0L var m = Math.abs(dividend) var n = Math.abs(divisor) if (n == 1L) { return sign * m } while (m >= n) { var t = n var p = 1 while (m >= t shl 1) { p = p shl 1 t = t shl 1 } m -= t result += p } return sign * result }}