LeetCode 29. Divide Two Integers

单纯减法不行,需要用到位运算。

a<<b表示 a*(2^b).

LeetCode出现了令人惊恐的同一段代码不同运行时间的情况.....

class Solution {
public:
    int divide(int x, int y) {
        int ans=0;
        if (x==INT_MIN && y==-1) return INT_MAX;
        
        long a=abs((long)x),b=abs((long)y);
        while(a>=b) {
            long m=1;
            long t=b;
            while((t<<1) <a){
                m<<=1;t<<=1;
            }
            a-=t;ans+=m;
        }
        
        if ((long)x*(long)y>0) return ans;
        else return -ans;
    }
};

 

posted @ 2018-09-15 00:22  Travelller  阅读(118)  评论(0编辑  收藏  举报