public class Solution {
public int getRes(long a,long b)
{
if(a==0)
return 0;
if(a<b)
return 0;
int res=0;
long times=1;
long remain=a;
long var=b;
while(remain>=var)
{
remain-=var;
res+=times;
var*=2;
times*=2;
}
if(remain>0)
{
res+=getRes(remain,b);
}
return res;
}
public int divide(int dividend, int divisor) {
// 先将被除数和除数都调整为正数
int MAX_INT=2147483647;
// 先用两个long类型的数据来存放dividend和divisor,否则会造成abs(-2147483648)溢出
// 由于long java.lang.Math.abs(long a) 函数的输入参数是long类型的时候
// 其返回值才是long类型,所以,首先将int类型的dividend和divisor转换为long类型的x和y
// 之后再进行long类型的abs操作。
// 如果不进行这一步的话,那么直接调用
// long a=Math.abs(dividend)
// 此时是执行的函数 int java.lang.Math.abs(int a)
// 如果 a=-2147483648,则得到的结果应该是-2147483648这个数的绝对值:2147483648
// 由于 int 存放正数 2147483648 会溢出,并变化为 -2147483648。
// 所以此时得到的long变量的值为-2147483648
// 即,long num=Math.abs(-2147483648),这个num的类型为long,值为-2147483648,原因是发生了溢出
long x=(long)dividend;
long y=(long)divisor;
long a=Math.abs(x);
long b=Math.abs(y);
int res=getRes(a,b);
//同号
if((dividend<0&&divisor<0)||(dividend>0&&divisor>0))
{
if(res<0)
return MAX_INT;
else
return res;
}
//异号
else
{
return 0-res;
}
}
}