您的位置:首页 > 其它

不用乘法、除法及取模运算,构造两个整数的除法

2014-10-29 16:51 609 查看
Question:

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

Code:

import java.lang.Math;
public class Solution {
public int divide(int dividend, int divisor) {
int status = 0;
int result = 0;
long divis=Math.abs(divisor),divid=Math.abs(dividend);
status = (dividend<0 && divisor<0 || dividend>0 && divisor>0) ? 0 : -1;

if(divisor == 1) return dividend;
if(divisor == -1) return -dividend;
if(divisor == 0) return 0;
if(divisor == 2) return dividend>>1;
if(dividend == -2147483648) divid = 2147483648l;
if(divisor == -2147483648) divis = 2147483648l;

result = (int) Math.floor(Math.exp( Math.log(((double)divid))-Math.log(((double)divis)) ) );
return (status==0)? result : (0-result);
}
}


Math.floor(double) :java取最近整数运算;

Math.exp(double) :Java取底数e的指数运算;

Math.log(double) : Java取自然对数运算;

MIN = -2147483648;表示整数能取到的最小值;

Max = 2147483647;表示整数能取到的最大值;

在将-2147483648传给long型的整数 时,由于整数最大值为2147483648,故要在2147483648 后面加上“l”(小写的L),表示它是一个long型整数。

如:long divid = 2147483648l;如果不加“l”,会出错。

由于返回值为int 型,故题目中出现测试用例:-2147483648/-1 是没有道理的!因此这个不予考虑!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐