除数

来源:互联网 发布:微软软件认证考试 编辑:程序博客网 时间:2024/04/29 18:22



两个数字相除 不能用 除号等

/**  * @Title: temp.java  * @Package   * @Description: TODO * @author nutc * @date 2013-9-7 下午1:42:09  * @version V1.0  */public class temp {public static void main(String asrgs[]){temp t = new temp();System.out.println(t.divide(-2147483648, 2));}    public int divide(int dividend1, int divisor1) {    //考虑1)正负号 2)溢出--long处理  记得在math.abs里就要long 不然 int 里的MIN_VALUE会溢出的!        if(divisor1 ==0) return -1;  //除数为0的时候应该怎么处理?        if(divisor1 == 1) return dividend1;        if(dividend1 == 0) return 0;                boolean ifn = false;        if(dividend1<0 && divisor1>0 || dividend1>0&&divisor1<0){            ifn  = true;            dividend1 = -dividend1;        }        long dividend = Math.abs((long)dividend1);  //最重要的环节!!最大的会造成溢出!! 因为正数比负数少一个啊啊啊啊         long divisor = Math .abs((long)divisor1);        int i = 1,j=1;                while(i*divisor>0 && i*divisor<dividend ){            j = i;            i+=i;        }//        System.out.println("i="+i+" "+i*divisor);        int temp = j;        while(i*divisor<0 || i*divisor<dividend){//        if(i*divisor>dividend) break;        if(i*divisor<0)        i -= temp;        temp >>=1;        i += temp;        }                while(j<=i){            int mid = j+((i-j)>>1); //左右移动的优先级 低于 常见操作符!!//            System.out.println(j+" "+mid+" "+i);            if(mid*divisor==dividend|| mid*divisor<dividend && (mid+1)*divisor>dividend){                if(!ifn)                    return mid;                else                    return -mid;            }            else if(mid*divisor>dividend){                i = mid-1;            }else{                j = mid+1;                }        }        return 0;    }} 

别人写的比较值得参考

/* * Divide two integers without using multiplication, division and mod operator. */public int divide(int dividend, int divisor) {    if (divisor == 0) throw new IllegalArgumentException("divisor cannot be 0");    if (dividend == 0) return 0;    boolean neg = (dividend > 0 != divisor > 0);    long dend = dividend;    long dsor = divisor;    dend = Math.abs(dend);    dsor = Math.abs(dsor);    if (dsor == 1)        return neg ? new Long(-dend).intValue() : new Long(dend).intValue());    if (dend == dsor)        return neg ? -1 : 1;    int quotient = 0;    while (dend >= dsor){        long tmp = dsor;        int result = 1;        while (dend >= (tmp + tmp)){            tmp <= 1;            result <= 1;        }        quotient += result;        dend -= tmp;    }    return neg ? -quotient : quotient;}

http://gist.github.com/bittib/5734695


原创粉丝点击