我使用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;
}
Run Code Online (Sandbox Code Playgroud)
未通过以下测试:
[TestMethod]
public void PenaltySumTest()
{
int x = -200000;
int y = 200000;
int z = 0;
Assert.AreEqual(z, penaltySum(x, y));
}
Run Code Online (Sandbox Code Playgroud)
我建议实现penaltySum()如下:
private int penaltySum(int x, int y, int max)
{
long result = (long) x + y;
return result > max ? max : (int) result;
}
Run Code Online (Sandbox Code Playgroud)
请注意,我传递了最大值,但如果您愿意,可以在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;
Run Code Online (Sandbox Code Playgroud)
}
| 归档时间: |
|
| 查看次数: |
206 次 |
| 最近记录: |