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;
    	}
    
  • 相关阅读:
    练习44-继承和组合
    CF 1329B Dreamoon Likes Sequences
    CF 1362C Johnny and Another Rating Drop
    CF 1391D 505
    CF 1383B GameGame
    CF1360F Spy-string(暴力)
    Java 之 关键字与标识符
    Java 之 Java 注释与 API
    Java 之 第一个Java程序
    Java 之 Java开发环境
  • 原文地址:https://www.cnblogs.com/tonyluis/p/4476520.html
Copyright © 2011-2022 走看看