Divide Two Integers

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;,
       
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值