LeetCoder 29. Divide Two Integers

来源:互联网 发布:查找企业的软件 编辑:程序博客网 时间:2024/06/08 00:09

题意

计算两个数相除,要求不能使用除法

思路

不能使用除法,但是可以使用减法来实现,如果使用普通的减法会超时,所以可以采用倍增的方法,例如:
计算dividenddivisor
利用2ndivisor,通过对n进行倍增来寻找divisor的个数,每次n加一,如果小于了dividend,那么n从1开始继续找,直到找完.

需要注意的case

  • 取绝对值之后int溢出
  • divisor为-1的时候的溢出情况

代码

class Solution {public:    int divide(int dividend, int divisor) {        size_t flag = 1;        if(divisor == 0) return INT_MAX;        if(dividend == INT_MIN && divisor == 1) return INT_MIN;        if(dividend == INT_MIN && divisor == -1) return INT_MAX;        if(dividend < 0) flag = -1;        if(divisor < 0){            if(flag == -1) flag = 1;            else flag = -1;        }        long long up = abs((long long)dividend);        long long down = abs((long long)divisor);        long long cnt = 0;        while(up >= down)        {            long long num = 1;            while(up >= (num * down))            {                up -= num * down;                cnt += num;                num *= 2;            }        }        return cnt * flag;    }};
原创粉丝点击