寻找一个.NET函数来求和,而不是溢出,只会返回int.MaxValue
时间:2020-03-06 14:41:45 来源:igfitidea点击:
我将int.MaxValue用作惩罚,有时我会一起计算惩罚。有没有一种功能,或者我们将如何创建功能最多,效率最高的功能。
IE。
50 + 100 = 150
整数最大值+ 50 =整数最大值而不是整数最小值+ 50
解决方案
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;
}
这个答案...
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));
}
我建议按以下方式实现刑罚Sum():
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;
}
它溢出很多还是错误状态?如何使用try / catch(溢出异常)?

