(两个整数相除,不用乘除取余算术符)
Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT.
以下是java实现代码(二分法思想)
package algorithm;
public class DivideTest {
public int divide(int dividend,int divisor) {
boolean negative= dividend<0 != divisor<0;
if(divisor==0) return Integer.MAX_VALUE;
if(dividend==0||dividend<divisor) {
return 0;
}
if(dividend<0) dividend=-dividend;
if(divisor<0) divisor=-divisor;
long res=divideLong(dividend, divisor);
int ans;
if(res>Integer.MAX_VALUE) {
ans=negative?Integer.MAX_VALUE:Integer.MIN_VALUE;
}else {
ans=(int)(negative?-res:res);
}
return ans;
}
public long divideLong(long dividend,long divisor) {
if(dividend <divisor) {
return 0;
}
long sum=divisor;
long res=1;
while(sum<<1 <= dividend) {
sum<<=1;
res<<= 1;
}
return res+divideLong(dividend-sum,divisor);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(new DivideTest().divide(100, 15));
}
}
每天进步一点点,加油
网友评论