29. 两数相除
class Solution { //倍增思想 public int divide(int dividend, int divisor) { if(dividend == 0) return 0; if(dividend == Integer.MIN_VALUE && divisor == - 1) { return Integer.MAX_VALUE; } // 两数异或结果小于0为异号,大于等于0为同号 int atoi = (dividend ^ divisor) < 0 ? -1 : 1; long t = Math.abs((long)dividend); long d = Math.abs((long)divisor); int res = 0; for(int i = 31; i >= 0; i--) { if((t>>i) >= d) { // 每次找出足够大的数2^n*divisor res += 1 << i; //将结果加上2^n t -= d << i; //将被除数减去2^n*divisor } } return atoi * res; } }