#java #modulo
#java #modulo
Вопрос:
Когда я использую operator % в своих Java-программах, я продолжаю получать отрицательные ответы. Пример: -10 дает -1. Хотя это математически правильно, я хочу получить обычное математическое решение или 99. Другими словами, я хочу получить наименьшее положительное целое решение. Есть ли какое-либо простое решение для этого в Java (возможно, что-то, что я упустил из виду в математике? — Я не могу его найти)?
Я также хочу уточнить, что если в API есть что-то, что делает это, ссылка была бы потрясающей.
Комментарии:
1. Математически правильное решение — это обычное математическое решение. Вы не задали свой вопрос четко, но звучит так, как будто вы хотите получить абсолютное значение вашей переменной перед ее изменением.
2. @Восприятие, он имеет в виду, что ему нужен остаток при делении в смысле алгоритма деления. То есть он хочет получить решение от 0 до 99 включительно. Большинство математиков (в отличие от компьютерных ученых) сочли бы это более значимым понятием остатка.
3. Я всегда делал это на уроках математики как наименьшее положительное целое решение. Но также, -1 мод 100 ! = 1 мод 100. Это то, что вы имели в виду?
4. См. Также операция по модулю .
Ответ №1:
Вы можете просто сделать это?
int d = 100;
int x = -1 % d;
if (x < 0)
x = d;
Это должно работать для любого положительного d
.
Комментарии:
1. К сожалению, нет. 100 не всегда будет модом. Это зависит.
2. Вам нужно обрабатывать отрицательный модуль?
3. Оператор if применяется после модуля. Поэтому оно не должно быть меньше -99.
4. Модуль вернет не менее -99. Таким образом, никогда не должно требоваться более одного дополнения.
5. Я не знаю API для этого, поскольку это кажется немного тривиальным.
Ответ №2:
Вы можете сделать следующее
int myMod(int x, int modulo)
{
return ((x % modulo) modulo) % modulo
}
Ответ №3:
Это работает для любых значений вместо d или x.
int d=100;
int x=-1%d;
while (x<0)
x =d;
Комментарии:
1. Вы только что скопировали мой ответ и изменили форматирование? (РЕДАКТИРОВАТЬ: неважно, вы изменили
if
на awhile
. Смотрите Комментарии к моему ответу …)
Ответ №4:
i < 0 ? n - ((-i - 1) % n 1) : i % n
Например:
class Mod {
public static int mod(int i, int n) {
return i < 0 ? n - ((-i - 1) % n 1) : i % n;
}
public static void main(String [] args) {
System.out.println("mod(-201, 100) == " mod(-201, 100));
System.out.println("mod(-200, 100) == " mod(-200, 100));
System.out.println("mod(17, 100) == " mod(17, 100));
System.out.println("mod(100, 100) == " mod(100, 100));
}
}
И
$ javac Mod.java amp;amp; java Mod
mod(-201, 100) == 99
mod(-200, 100) == 0
mod(17, 100) == 17
mod(100, 100) == 0
Нет циклов.
Комментарии:
1. Это не сработает, если i % n равно 0, а i < 0; например, mod(-200, 100) == 100 вместо 0.