算法之整数除法


输入2个int型整数,它们进行除法计算并返回商,要求不得使用乘号'*'、除号''及求余符号'%'。当发生溢出时,返回最大的整数值。假设除数不为0。

/**
 * 输入2个int型整数,它们进行除法计算并返回商,要求不得使用乘号'*'、除号'\'及求余符号'%'。
 * 当发生溢出时,返回最大的整数值。假设除数不为0.
 * @author onefiter
 *
 */
public class Main {


	public static void main(String[] args) {
		int dividend = 10;
		int divisor = 2;
		int result = divide(dividend, divisor);
		System.out.println(result);
	
	}
	

	public static int divide(int dividend, int divisor) {
		if (dividend == 0x80000000 && divisor == -1) {
			return Integer.MAX_VALUE;
		}
		
		int negative = 2;
		
		if (dividend > 0) {
			negative--;
			dividend = -dividend;
		}
		
		if (divisor > 0) {
			negative--;
			divisor = -divisor;
		}
		int result = divideCore(dividend, divisor);
		return negative == -1 ? -result : result;
		
	}
	
	private static int divideCore(int dividend, int divisor ) {
		int result = 0;
		while (dividend <= divisor) {
			int value = divisor;
			int quotient = 1;
			while (value >= 0x00000000 && dividend <= value + value) {
				quotient += quotient;
				value += value;
				
			}
			
			result += quotient;
			dividend -= value;
			
		}
		
		return result;
	}
	

}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM