你可以想到像这样实现的 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 = 3m = 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您的小时红利。