1) 加速-减速过程,先减去最大的b^power, 然后减小点的b^pow
2) 移位判断符号
3) 各种数据类型是long还是int
ref http://blog.csdn.net/perfect8886/article/details/19092179
ref http://www.cnblogs.com/springfor/p/3871008.html
public class Solution {
public int divide(int dividend, int divisor) {
// // 看人家的提速方式"指数级增加后再减"" http://blog.csdn.net/perfect8886/article/details/23040143
// // if (dividend==0 || divisor==0 || dividend<divisor) return 0;
if (dividend==0 || divisor==0) return 0;
// boolean isNeg = (dividend<0 && divisor>0)||(dividend>0 && divisor<0);
long a = Math.abs((long) dividend);
long b = Math.abs((long) divisor);
long pow=0;
long sum =0;
long res =0;
if(b>a) return 0;
while(a>=b){
//pow++;sum += b;
pow=1;
sum = b;
while(a>=sum+sum) {
sum +=sum;
pow +=pow;
}
a -= sum;
res += pow;
} // 中间加速环节相当于减去一个大b^pow, 然后剩下的部分再减去小的b^pow
// update by 爱做饭
//return isNeg ? -res: res;
res = ((((dividend ^ divisor) >> 31) & 1) == 1) ? -res: res;// int 右移,把符号移到最右,比较是否相同(^亦或符号,不同为0),与1对比
if (res > Integer.MAX_VALUE || res < Integer.MIN_VALUE) {
return Integer.MAX_VALUE;
}
return (int) res;,
}
}