我使用int.MaxValue作为惩罚,有时候我会一起计算惩罚.是否有功能或如何创建具有最大优势和效率的功能.
即.
50 + 100 = 150
int.Max + 50 = int.Max而不是int.Min + 50
这个答案......
int penaltySum(int a, int b) { return (int.MaxValue - a < b) ? int.MaxValue : a + b; }
未通过以下测试:
[TestMethod] public void PenaltySumTest() { int x = -200000; int y = 200000; int z = 0; Assert.AreEqual(z, penaltySum(x, y)); }
我建议实现penaltySum()如下:
private int penaltySum(int x, int y, int max) { long result = (long) x + y; return result > max ? max : (int) result; }
请注意,我传递了最大值,但如果您愿意,可以在int.MaxValue中进行硬编码.
或者,您可以强制执行算术运算溢出检查并执行以下操作:
private int penaltySum(int x, int y, int max) { int result = int.MaxValue; checked { try { result = x + y; } catch { // Arithmetic operation resulted in an overflow. } } return result;
}