你可以想到像这样实现的 ruby 中的整数除法——
给定a
和b
,ruby 找到整数解, q b + m = a
使得
m
是相同的符号b
- 的值
m
尽可能小(接近于零)。
这两条规则为q
( a / b
) 和m
( a % b
) 提供了独特的解决方案。
在您的第一种情况下,a
是 14200 和3600。b
遵循q b + m = a
这些规则的唯一解决方案是- 尝试一下。q = 3
m = 1600
> 3 * 3600 + 1600
# => 12400
这是唯一的解决方案吗?怎么样q = 4
?然后
4 * 3600 + m = 12400
m = -2000
不……m
现在不仅比以前更大,而且甚至是错误的标志(还记得第一条规则吗?)
怎么样q = 2
?
2 * 3600 + m = 12400
m = 5200
不......我们的第一个解决方案m
是更小。q
因此,和可能的唯一值m
是 3 和 1600。
现在让我们试试你的第二种情况——a
现在-12400
和b
现在3600
。唯一的解决方案是q = -4
和b = 2000
。
让我们检查。
> -4 * 3600 + 2000
# => -12400
有用!
让我们快速检查其他值q
- 让我们尝试 -3,如果我们与第一个示例进行比较,这是“显而易见的”答案:
-3 * 3600 + m = -12400
m = -1600
好吧……嗯,m
这里比以前“更小”了……所以它符合规则#2。但是规则 #1 说它m
必须与 ... 的符号相同,b
所以我们不会接受 的负值m
。
因此,唯一唯一的解决方案是q = -4
和m = 2000
。
您的问题中的其他两个部门应该从这里清楚。
为了获得您似乎期望的结果,您应该使用-3600
而不是3600
您的小时红利。