[LeetCode]Divide Two Integers

来源:互联网 发布:windows重置此电脑失败 编辑:程序博客网 时间:2024/05/29 04:18

题目

Number: 29
Difficulty: Medium
Tags: Math, Binary Search

Divide two integers without using multiplication, division and mod operator.

If it is overflow, return MAX_INT.

题解

不许用除法、乘法、模运算,求解两个数相除。

除法可以用减法求解,但是时间很慢。

while(dividend >= dividsor){    dividend = dividend - dividsor;    result++;}

这时可以考虑用二分搜索,每次把除数扩大2倍,直到比被除数大,两数相减,一下子减少一半以上。

代码

int divide(int dividend, int divisor) {    if(divisor == 1)        return dividend;    if(dividend == INT_MIN && abs(divisor) == 1)        return INT_MAX;    int result = 0;    int sign = (dividend > 0 ^ divisor > 0) ? -1 : 1;    long end = abs((long)dividend);    long sor = abs((long)divisor);    while(end >= sor)    {        long temp = sor;        int power = 1;        while((temp << 1) < end)        {            temp <<= 1;            power <<= 1;        }        result += power;        end -= temp;    }    return result * sign;}
0 0
原创粉丝点击