我使用int.MaxValue作为惩罚,有时候我会一起计算惩罚。是否有功能或如何创建具有最大优势和效率的功能。
即。
50 + 100 = 150
int.Max + 50 = int.Max而不是int.Min + 50
答案 0 :(得分:6)
这个答案......
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;
}
答案 1 :(得分:4)
int penaltySum(int a, int b)
{
return (int.MaxValue - a < b) ? int.MaxValue : a + b;
}
更新:如果您的处罚可能是负面的,这将更合适:
int penaltySum(int a, int b)
{
if (a > 0 && b > 0)
{
return (int.MaxValue - a < b) ? int.MaxValue : a + b;
}
if (a < 0 && b < 0)
{
return (int.MinValue - a > b) ? int.MinValue : a + b;
}
return a + b;
}
答案 2 :(得分:0)
它是否会溢出很多,或者是错误的情况?如何使用try / catch(溢出异常)?