Распознавание, когда использовать оператор модуля

Я знаю модуль (%), оператор вычисляет остаток от подразделения. Как я могу определить ситуацию, где я должен был бы использовать оператор модуля?

Я знаю, что могу использовать оператор модуля, чтобы видеть, является ли число даже или нечетный и главный или составной, но это об этом. Я не часто думаю с точки зрения остатков. Я уверен, что оператор модуля полезен, и я хотел бы учиться использовать в своих интересах его.

У меня просто есть проблемы при идентификации, где оператор модуля применим. В различных ситуациях с программированием для меня трудно видеть проблему и понять "Эй! Остаток от подразделения работал бы здесь!".

56
задан Peter Mortensen 17 January 2014 в 19:53
поделиться

12 ответов

Как говорит @jweyrich, обертывание значений. Я нашел мод очень удобным, когда у меня есть конечный список, и я хочу перебирать его в цикле - например, фиксированный список цветов для некоторых элементов пользовательского интерфейса, таких как серии диаграмм, где я хочу, чтобы все серии были разными, чтобы насколько это возможно, но когда у меня заканчиваются цвета, просто чтобы начать сначала. Это также можно использовать, скажем, с узорами, так что второй раз, когда появляется красный цвет, он отображается пунктирной линией; в третий раз, пунктирная и т. д. - но мод просто используется, чтобы получить красный, зеленый, синий, красный, зеленый, синий, навсегда.

3
ответ дан 26 November 2019 в 17:17
поделиться

Представьте, что у вас есть прошедшее время в секундах, и вы хотите преобразовать его в часы, минуты и секунды:

h = s / 3600;
m = (s / 60) % 60;
s = s % 60;
25
ответ дан 26 November 2019 в 17:17
поделиться
  • Обертывание значений (как часы).
  • Обеспечьте конечные поля для алгоритмов с симметричным ключом.
  • Побитовые операции.

И так далее.

10
ответ дан 26 November 2019 в 17:17
поделиться

Каждый раз, когда у вас есть деление и вы хотите выразить остаток не в десятичной форме, подходит оператор mod. Обычно в голову приходят вещи, когда вы хотите сделать что-то удобочитаемое с остатком. Перечислить, сколько предметов вы можете положить в ведра, и сказать «5 осталось» - это хорошо.

Кроме того, если вы когда-нибудь окажетесь в ситуации, когда у вас могут возникнуть ошибки округления, деление по модулю подойдет. Например, если вы делите на 3 довольно часто, вы не хотите передавать 0,33333 в качестве остатка. Уместно передать остаток и делитель (т.е. дробь).

3
ответ дан 26 November 2019 в 17:17
поделиться

Модуль также очень полезен, если по какой-то безумной причине вам нужно сделать целочисленное деление и получить десятичную дробь, а вы не можете преобразовать целое число в число, поддерживающее десятичное деление, или если вам нужно вернуть дробь вместо десятичной.

Я буду использовать % в качестве оператора модуля

Например,

2/4 = 0

, где это делается

2/4 = 0 и 2% 4 = 2

Итак, вы можете быть действительно сумасшедшим и допустим, что вы хотите разрешить пользователю вводить числитель и делитель, а затем показывать им результат в виде целого числа, а затем дробного числа.

whole Number = numerator/divisor
fractionNumerator = numerator % divisor
fractionDenominator = divisor

Другой случай, когда деление по модулю полезно, - это если вы увеличиваете или уменьшаете число и хотите, чтобы число соответствовало определенному диапазону чисел, но когда вы добираетесь до вершины или низа, вы не хотите просто останавливаться . Вы хотите перейти в конец или вверх по списку соответственно.

Представьте себе функцию, в которой вы просматриваете массив в цикле.

Function increase Or Decrease(variable As Integer) As Void
    n = (n + variable) % (listString.maxIndex + 1)  
    Print listString[n]
End Function

Причина, по которой это n = (n + variable)% (listString.maxIndex + 1), заключается в том, чтобы учесть максимальный индекс.

Это лишь некоторые из вещей, для которых мне пришлось использовать модуль в моем программировании не только настольных приложений, но и в робототехнике и средах моделирования.

3
ответ дан 26 November 2019 в 17:17
поделиться
0 % 3 = 0;
1 % 3 = 1;
2 % 3 = 2;
3 % 3 = 0;

Вы видели, что он сделал? На последнем этапе он вернулся к нулю. Это может быть использовано в таких ситуациях, как:

  1. Чтобы проверить, делится ли N на M (например, нечетное или четное) или N делится на M.

  2. Положить крышка определенного значения. В данном случае 3.

  3. Чтобы получить последние M цифр числа -> N% (10 ^ M).
20
ответ дан 26 November 2019 в 17:17
поделиться

Я использовал его при ограничении числа определенным кратным:

temp = x - (x % 10); //Restrict x to being a multiple of 10
11
ответ дан 26 November 2019 в 17:17
поделиться

Вычисление простых чисел

3
ответ дан 26 November 2019 в 17:17
поделиться
  • Вычисление наибольшего общего делителя
  • Определение, является ли число палиндромом
  • Определение, состоит ли число только из ...
  • Определение сколько ... число состоит из ...
2
ответ дан 26 November 2019 в 17:17
поделиться

Есть много случаев, когда это полезно.

Если вам нужно ограничить число определенным диапазоном, вы можете использовать mod. Например, для генерации случайного числа от 0 до 99 вы можете сказать:

num = MyRandFunction() % 100;
2
ответ дан 26 November 2019 в 17:17
поделиться

Пример. У вас есть сообщение размером X байт, но в вашем протоколе максимальный размер Y и Y < X. Попробуйте написать небольшое приложение, которое разбивает сообщение на пакеты, и вы столкнетесь с модой :)

.
4
ответ дан 26 November 2019 в 17:17
поделиться

Я использую его для индикаторов выполнения и т.п. О прогрессе сообщается только каждый n-й раз в цикле или при подсчете% n == 0.

16
ответ дан 26 November 2019 в 17:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: