Divide Two Integers

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

比有趣在于1 提速过程 2怎么判断符号正负

 

public class Solution {
    public int divide(int dividend, int divisor) {
        long res =0, a = Math.abs((long) dividend), b=Math.abs((long) divisor), sum=0, pow = 0;
        if(b>a) return 0;
        // 中间加速环节相当于减去一个大b^pow, 然后剩下的部分再减去小的b^pow, ref: http://blog.csdn.net/perfect8886/article/details/23040143
        while(a>=b){
            sum=b;
            pow=1;
            while(a>=sum+sum){
                sum += sum;
                pow += pow;
            }
            a -= sum;
            res += pow;
        }
        //return isNeg ? -res:  res;
        res = (((dividend ^ divisor) >> 31) & 1)==1? -res:res;
        if(res>Integer.MAX_VALUE||res< Integer.MIN_VALUE)
            return Integer.MAX_VALUE;
        return (int) res;
        
    }
}

 

posted @ 2015-06-02 03:32  世界到处都是小星星  阅读(129)  评论(0编辑  收藏  举报