输入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;
}
}