2013-05-01 4 views
10

Прошу прощения, если это простой вопрос, но у меня возникли проблемы с пониманием понятия модульного деления, когда первое число меньше второго. Например, когда 1% 4 в моей книге говорится, что остаток равен 1. Я не понимаю, как 1 является остатком 1% 4.
1/4 составляет 0,25. Я неправильно думаю о модульном подразделении?Разделение по модулю, когда первое число меньше второго номера

ответ

10

Во-первых, на Java,% является оператором остатка (немодуля), который имеет несколько другую семантику. Тем не менее, вам нужно думать в терминах целочисленного деления, как если бы не было дробных значений. Подумайте об этом как о хранении предметов, которые нельзя разделить: вы можете хранить нулевые предметы размером 4 в хранилище общей емкости. Ваша оставшаяся емкость после хранения максимального количества элементов - одна. Аналогично, 13% 5 равно 3, так как вы можете поместить 2 полных элемента размером 5 в хранилище размером 13, а оставшаяся емкость - 13 - 2*5 = 3.

+0

. Я понимаю остаточное деление, когда первое число больше второго. Так что я понимаю, как 13% 5. 3. Я не понимаю, каков будет ответ, если при 5% 13. –

+0

Если ваш товар больше вашей емкости, вы никогда не сможете поместить его в свое хранилище. Поэтому результат ВСЕГДА ваша общая емкость, которая остается неиспользованной (т. Е. Первое число - вы, вероятно, означало «5% 13») – misberner

+0

Да, я действительно имел в виду 5% 13, а не наоборот. Итак, если я получу то, что вы говорите, ответ на 5% 13 равен 5? Это верно? –

4

Если вы разделите 1 на 4, вы получите 0 с остатком 1. Это все модуль, остаток после деления.

+0

Что произойдет, если это будет 40% 160 –

+0

@yanivx то же самое, 0 осталось 40, так что ответ равен 40 –

2

Еще один способ подумать об этом как о представлении вашего номера в нескольких экземплярах другого номера. I.e, a = n*b + r, где b>r>=0. В этом смысле ваш случай дает 1 = 0*4 + 1. (изменить: говорить только о положительных числах)

0

Я думаю, вы смущены между %(Remainder) и /(Division) операторами.

Когда вы говорите %, вам нужно продолжать делиться дивидендом, пока не получите остаток 0 или возможный конец. И то, что вы получаете в конце, называется Remainder.

Когда вы говорите /, вы разделите дивиденд до делителя становится 1. И конечный продукт вы получите называется Quotient

0

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

17 % 5 = ? 
17 - 5 = 12 
12 % 5 = ? 
12 - 5 = 7 
7 % 5 = ? 
7 - 5 = 2 
2 % 5 = 2 

Поэтому 17% 5, 12% 5, 7% 5 все они дают ответ 2. Это потому, что 2/5 = 0 (при работе с целыми числами) с 2 в качестве остатка.

0

Я собираюсь добавить более практичный пример того, что уже сказал «Жан-Бернард Пеллерин».

Правильно, если вы разделите 1 на 4, вы получите 0, но, почему, когда вы делаете 1% 4, у вас есть 1 результат?

В основном это происходит потому, что это:

n = a/b (integer), and 
m = a % b = a - (b * n) 

Так,

a b n = a/b b * n m = a%b 
1 4  0  0  1  
2 4  0  0  2 
3 4  0  0  3 
4 4  1  0  0 
5 4  1  4  1 

Заключение: В то время как < б, результат% б будет ""

 Смежные вопросы

  • Нет связанных вопросов^_^