Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
解法1:
这题有几个坑:一个是分母有可能是0, 这种情况要判断dividend的正负而返回。一个是INT_MIN/(-1) > INT_MAX, 所以这种条件下会overflow。还有一个是分子分母有可能符号不同。
除法的基本算法是把被除数A分拆成A = B*(2^n1 + 2^n2 + ….), 每一次找出比A小的最大的B的2的倍数,也就是求出Ni。这里每一次B乘以2的操作可以用左位移表示。
这里引出了另外一个坑,就是往左移的时候可能会溢出,所以一开始要把他们转化为long型再操作。
Java