您的位置:首页 > 其它

【Leetcode】Divide Two Integers

2015-11-03 15:50 399 查看
Divide two integers without using multiplication, division and mod operator.

If it is overflow, return MAX_INT.


简单解法:O(dividend/divisor)

public class Solution {
public int divide(int dividend, int divisor) {
int result = 0;
int negative = 1;
if(dividend < 0 && divisor > 0) {negative = -1; dividend = -dividend;}
if(dividend > 0 && divisor < 0) {negative = -1; divisor = -divisor;}
while(dividend >= 0){
dividend -= divisor;
result++;
}
result--;
return result*negative;
}
}

位移算法:
public class Solution {
public int divide(int dividend, int divisor) {
if(divisor == 0) return Integer.MAX_VALUE;
if(divisor == -1 && dividend == Integer.MIN_VALUE) return Integer.MAX_VALUE;
if(dividend == divisor) return 1;
int result = 0;
int negative = 1;
long divid = (long) dividend;
long divis = (long) divisor;
if(dividend < 0) {divid = -divid;}
if(divisor < 0) {divis = -divis;}
if((dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0)) negative = -1;
long newDivis = divis;
while(divid >= divis){
int i = 1;
while(newDivis <= divid){
newDivis = divis << i;
i++;
}
divid -= divis << (i - 2);
result += 1 << (i-2);
newDivis = divis;
}
return result*negative;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: