29. Divide Two Integers Medium

    xiaoxiao2021-03-25  61

    这道题是想用减法来实现除法,通常的做法是a不停的减b,看能减多少次,但是这样会有超时的情况,比如很大的数除以1,这个时候需要用到的技巧就是让b向左移位,相当于乘二,再跟a比较,如果a还是大,再把b移位,再比较,这样循环进行,直到a小,就减去最后一次移位之前b的值。简而言之,就是让a不停的减去最大可减的b的2的n次方倍,这样来更快的计算b的个数。这里用到了一些位运算,还有labs函数,返回的是long int 的结果(abs返回的是int

    class Solution { public:     int divide(int dividend, int divisor) {     if(divisor == 0 || (dividend <= INT_MIN && divisor == -1))     return INT_MAX;     int sign = ((dividend < 0) ^ (divisor < 0))? -1: 1;     long long d1 = labs(dividend);     long long d2 = labs(divisor);     int count = 0;     while(d1 >= d2){     int left = 1;     while(d1 >= (d2 << left)) left++;     d1 -= d2 << (left - 1);     count += pow(2, (left - 1));     }     return sign == 1? count: -count;     } };

    转载请注明原文地址: https://ju.6miu.com/read-38172.html

    最新回复(0)