object Solution {
private val HALF_MIN = -1073741824
def divide(_dividend: Int, _divisor: Int): Int = {
var dividend = _dividend
var divisor = _divisor
if (dividend == Integer.MIN_VALUE && divisor == -1) return Integer.MAX_VALUE
var negatives = 2
if (dividend > 0) {
negatives -= 1
dividend = -dividend
}
if (divisor > 0) {
negatives -= 1
divisor = -divisor
}
var highestDouble = divisor
var highestTwoPower = -1
while ( {
highestDouble >= HALF_MIN && dividend <= highestDouble * 2
}) {
highestTwoPower += highestTwoPower
highestDouble += highestDouble
}
var quotient = 0
while ( {
dividend <= divisor
}) {
if (dividend <= highestDouble) {
quotient += highestTwoPower
dividend -= highestDouble
}
highestTwoPower >>= 1
highestDouble >>= 1
}
if (negatives != 1) -quotient
else quotient
}
def main(arg: Array[String]): Unit = {
val dividend = 8
val divisor = 2
val result = divide(dividend, divisor)
println(result)
}
}