您的位置:首页 > 编程语言 > Java开发

(java) Divide Two Integers

2016-02-17 00:02 666 查看
Divide two integers without using multiplication, division and mod operator.

If it is overflow, return MAX_INT.

思路,就是实现除法操作。

注意点:1 除数为0

2 存在负数且是最小的负数

这两种情况要特殊处理,其实除法就是用加法来实现的。普通的连加是会超时的,可以翻倍加

比如 被除数是100,除数是3,

设置一个sum和一个count

sum=sum+sum;

count=count+count;

sum=3 count=1

sum=6 count=2;

sum=12 count=4;

sum=24 count=8;

sum=48 count=16;

sum=94 count=32;

被除数还剩4

变成了4除以3,count=32+1=33;

得出结果,时间复杂度符合要求。

代码如下(已通过leetcode)

public class Solution {

public int divide(int dividend, int divisor) {

if(divisor==0) return Integer.MAX_VALUE;

if(dividend==0) return 0;

long tempdividend=dividend;

long tempdivisor=divisor;

tempdividend=Math.abs(tempdividend);

tempdivisor=Math.abs(tempdivisor);

if(tempdividend<tempdivisor) return 0;

long tempres=0;

long sum;

long count;

while(tempdividend>=tempdivisor) {

count=1;

sum=tempdivisor;

while(sum+sum<=tempdividend) {

sum=sum+sum;

count=count+count;

}

tempdividend=tempdividend-sum;

tempres=tempres+count;

}

//System.out.println(tempres);

if((dividend>0) ^ (divisor>0)) tempres=-tempres;

if(tempres>Integer.MAX_VALUE || tempres<Integer.MIN_VALUE) return Integer.MAX_VALUE;

else return (int)tempres;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: