如果这是一个简单的问题,我深表歉意,但是当第一个数字小于第二个数字时,我无法理解模除的概念。例如,当 1 % 4 我的书说余数是 1。我不明白 1 是 1 % 4 的余数
。1 / 4 是 0.25。我是否在错误地考虑模数除法?
6 回答
首先,在 Java 中,% 是余数(不是取模)运算符,其语义略有不同。也就是说,您需要考虑仅整数除法,就好像没有小数值一样。可以将其视为存储不可分割的项目:您可以在总容量为 1 的存储中存储零个大小为 4 的项目。存储最大项目数后您的剩余容量为 1。类似地,13%5 是 3,因为您可以在 13 大小的存储中容纳 2 个大小为 5 的完整物品,剩余容量为13 - 2*5 = 3
.
如果将 1 除以 4,则得到 0,余数为 1。这就是模数,除法后的余数。
我将为“Jean-Bernard Pellerin”已经说过的内容添加一个更实际的例子。
正确的是,如果将 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
结论:当 a < b 时,a % b 的结果将是“a”
另一种将其视为您的数字以另一个数字的倍数表示的方式。即,a = n*b + r
在哪里b>r>=0
。从这个意义上说,您的情况给出了1 = 0*4 + 1
. (编辑:仅谈论正数)
我认为您在%(Remainder)
和/(Division)
运算符之间感到困惑。
当你说 时%
,你需要不断地除以股息,直到你得到余数 0 或可能的结尾。而你最终得到的叫做Remainder
.
当您说 时/
,您将除数除以,直到除数变为 1。您得到的最终产品称为Quotient
另一种解决问题的好方法,在模数中,如果第一个数字大于第二个数字,则从第一个数字中减去第二个数字,直到第一个数字小于第二个数字。
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。