您的位置:首页 > 其它

LeetCode_OJ【29】Divide Two Integers

2015-09-21 10:12 316 查看
Divide two integers without using multiplication, division and mod operator.

If it is overflow, return MAX_INT.

这题运用移位轻松解决,但是要注意是否会溢出,在会不会溢出这里我卡了好久。

int占4字节,表示范围为-2^31 ~ 2^31-1。

程序首先要将除数与被除数都变成正数,当这两个数中有一个数为int_min的时候,取反直接溢出,所以在取反前就得强制转换为long

结果计算完成之后判断是否溢出再做相应处理。

下面该题目的java代码实现。

public class Solution {
public int divide(int dividend, int divisor) {
long a = dividend >=0 ? dividend : -(long)dividend;
long b = divisor >=0 ? divisor : -(long)divisor;

long result = 0;

while(a >= b){
long c = b ;
for(int i = 0 ; a >= c ;i++, c<<=1){
a -= c;
result += (1 << i);
}
}
if((dividend^divisor)>>31 != 0)
result = - result;
if(result > Math.pow(2, 31) -1)
return (int)(Math.pow(2, 31) -1);
else if(result < -Math.pow(2, 31))
return -(int)Math.pow(2, 31);
else
return (int)result;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息