首页 > 其他 > 详细

Jan 15 - Divide Two Integers; Math; Integer; Bit Operation;

时间:2016-01-16 11:44:36      阅读:92      评论:0      收藏:0      [点我收藏+]

注意 Integer.MIN_VALUE * (-1) 会溢出, 这里所有变量变成long防止溢出

除数*2 对映的倍数(商)也会乘以2;再用被除数减去除数*2^n 剩余的数如果依然能被除数整除,接着循环操作

代码:

public class Solution {
    public int divide(int dividend, int divisor) {
        int result = 0;
        int flag = 0;
        if(divisor == 0 ||(divisor == -1 && dividend == Integer.MIN_VALUE)) return Integer.MAX_VALUE;
        if(dividend == 0) return 0;
        if(dividend < 0) flag++;
        if(divisor < 0) flag++;
        long divn = (long) (Math.abs((long) dividend));
        long divs = (long) (Math.abs((long) divisor));
        
        while(divs <= divn){
            long temp = divs;
            long x = 1;
            while((temp<<1) < divn){
                x <<= 1;
                temp <<= 1;
            }
            result += x;
            divn -= temp;
        }
        return flag == 1? (0-result) : result;
    }
}

  

Jan 15 - Divide Two Integers; Math; Integer; Bit Operation;

原文:http://www.cnblogs.com/5683yue/p/5135079.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!