Я записываю код, который определяет частное после деления двух чисел, но без использования умножения, деления или оператора мод.
Мой код
public int divide(int dividend, int divisor) {
int diff=0,count=0;
int fun_dividend=dividend;
int fun_divisor=divisor;
int abs_dividend=abs(dividend);
int abs_divisor=abs(divisor);
while(abs_dividend>=abs_divisor){
diff=abs_dividend-abs_divisor;
abs_dividend=diff;
count++;
}
if(fun_dividend<0 && fun_divisor<0){
return count;
}
else if(fun_divisor<0||fun_dividend<0) {
return (-count);
}
return count;
}
Мой код проходит тестовые случаи, такие как «делимое = 1», «делитель = 1» или «делимое = 1» и «делитель = -1». Но он не может пройти тестовый пример, такой как divnd = - 2147483648 и divisor = -1. Однако у меня есть оператор if, когда оба входа отрицательны.
if(fun_dividend<0 && fun_divisor<0){
return count;
}
Когда мои входные значения -2147483648 и -1, он возвращает ноль. Я отладил свой код и обнаружил, что он не может достичь внутренних операторов цикла while. Он просто проверяет цикл while, завершается и выполняет
if(fun_dividend<0 && fun_divisor<0){
return count;
}
Это очень очевидно, оба входа отрицательны, поэтому я использовал функцию Math.abs
, чтобы сделать их положительными. Но когда я пытаюсь увидеть значения переменных abs_dividend и abs_divisor, они показывают мне отрицательные значения.
Integer max может принимать 9-значное число. Так как я мог пройти этот контрольный пример? Согласно этому тестовому случаю дивидендом является десятизначное число, которое недопустимо для целочисленного диапазона.
Согласно тесту, вывод, который я получаю, должен быть 2147483647.
Как я могу устранить ошибку?
Заранее спасибо.