[leetcode]Divide Two Integers

一开始直接用循环减法,会超时,网上看了下,就是除数倍增的方法,这样复杂度由n变成lg n。中间还要注意负数溢出的情况,直接用long了。

public class Solution {
    public int divide(int dividend, int divisor) {
        // Start typing your Java solution below
        // DO NOT write main() function       
        int ans = 0;
        boolean sign = true;
        
        if ((dividend >0 && divisor <0)
            || (dividend < 0 && divisor >0 )) sign = false;
            
        long a = dividend;
        long b = divisor;
        if (a < 0) a = -a;
        if (b < 0) b = - b;
        
        
        while (a >= b)
        {
            int multi = 1;
            long tmp = b;
            while (a >= tmp) {
                a -= tmp;
                ans += multi;
                tmp += tmp;
                multi += multi;
            }
        }
        if (!sign) return -ans;
        else return ans;
    }
}

  

posted @ 2013-08-01 00:19  阿牧遥  阅读(819)  评论(0编辑  收藏  举报