29. Divide Two Integers

来源:互联网 发布:uber隐瞒数据泄露事件 编辑:程序博客网 时间:2024/05/16 09:46

Divide two integers without using multiplication, division and mod operator.

If it is overflow, return MAX_INT.

Subscribe to see which companies asked this question

不用乘除法和取模运算计算除法。

超范围的情况

1.除数为0

2.被除数为Integer.MIN_VALUE 除数为-1 这样结果会是Integer.MAX_VALUE+1 因为负数最小值能比正数最大值多1

剩余就是全转成正数,然后用二进制除法算就好

public class Solution {    public int divide(int dividend, int divisor) {        if(dividend==-2147483648&&divisor==-1)return Integer.MAX_VALUE;        if(divisor==0)return  Integer.MAX_VALUE ;        int flag = 1;        if(dividend<0)flag=-flag;        if(divisor<0)flag = -flag;     long dia =Math.abs((long)dividend);     long dib =Math.abs((long)divisor);     long c = 1;     while(dia > dib){         dib = dib << 1 ;         c = c << 1;     }     int res = 0;     while (dia>=Math.abs((long)divisor)){         while(dia>=dib){             dia = dia - dib;             res+=c;         }         dib=dib>>1;         c=c>>1;     }if(flag>0)return (int)res;    else return (int)(-res);    }    }

0 0
原创粉丝点击