【leetcode】29. Divide Two Integers

来源:互联网 发布:windows刷mac os 编辑:程序博客网 时间:2024/05/23 10:35

使用原始加法进行累加会超时,所以后来使用位移来进行累加。

    int divide(int dividend, int divisor) {        if(divisor == 0 || (divisor == -1 && dividend == INT_MIN)) return INT_MAX;        int sign = ((dividend < 0) ^ (divisor < 0)) ? -1 : 1;        long long n1 = llabs(dividend);//必须是llabs,不然会超时        long long n2 = llabs(divisor);        if(n1 < n2) return 0;        long long n3 = n2;        int res = 0;                int cnt = 0;        while((n2<<1) <= n1)        {            n2 = n2 << 1;            res += pow(2,cnt++);//位移以后可以进行指数级别的快速累加        }        while((n2) <= n1)        {            res++;            n2 += n3;        }        return sign == -1 ? -res : res;    }
注视处踩坑N久,故记录一下。

0 0
原创粉丝点击