zoukankan      html  css  js  c++  java
  • Java for LeetCode 029 Divide Two Integers

    Divide two integers without using multiplication, division and mod operator.

    If it is overflow, return MAX_INT.

    解题思路:

    既然不呢个用乘除和取模运算,只好采用移位运算,可以通过设置一个length代表divisor向左的做大移位数,直到大于dividend,然后对length做一个循环递减,dividend如果大于divisor即进行减法运算,同时result加上对应的值,注意边界条件,JAVA实现如下:

    static public int divide(int dividend, int divisor) {
    		if (divisor == 0)
    			return Integer.MAX_VALUE;
    		boolean isNeg = dividend < 0;
    		if (divisor < 0)
    			isNeg = !isNeg;
    		int length = 0;
    		long longdividend = Math.abs((long) dividend);
    		long longdivisor = Math.abs((long) divisor), result = 0;
    		while (longdividend >= longdivisor) {
    			longdivisor = longdivisor << 1;
    			length++;
    		}
    		while (length >= 0) {
    			if (longdividend >= longdivisor) {
    				result += Math.pow(2, length);
    				longdividend -= longdivisor;
    			}
    			longdivisor = longdivisor >> 1;
    			length--;
    		}
    		if (result > Integer.MAX_VALUE && !isNeg)
    			result = (long) Integer.MAX_VALUE;
    		return isNeg ? -(int) result : (int) result;
    	}
    
  • 相关阅读:
    JDBC连接效率问题
    如何配置Filter过滤器处理JSP中文乱码(转)
    Servlet生命周期与工作原理(转)
    ANR触发原理
    SystemServer概述
    Zygote总结
    ART、JIT、AOT、Dalvik之间有什么关系?
    谈谈android缓存文件
    Activity启动过程全解析
    tombstone问题分析
  • 原文地址:https://www.cnblogs.com/tonyluis/p/4476520.html
Copyright © 2011-2022 走看看