1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| package com.demo.s29;
public class Solution { public int divide(int dividend, int divisor) {
if (dividend == -2147483648 && divisor == -1) return 2147483647; if (dividend == 2147483647 && divisor == 1) return 2147483647; int result = 0; boolean isNeg = (dividend < 0 ^ divisor < 0); dividend = -Math.abs(dividend); divisor = -Math.abs(divisor); while (dividend <= divisor) { int d = divisor; int cnt = 1; while (dividend <= d && d >= -1073741824) { d = d << 1; cnt = cnt << 1; }
if (dividend <= d) { dividend -= d; result += cnt; } else { dividend -= d >> 1; result += cnt >> 1; } } return isNeg ? -result : result;
} }
|