问题:如果一个数字超出了它的类型范围,你如何让程序失败?
下面的代码给出了小于 200 万的素数之和的错误答案,因为我使用了 int 而不是 long。
[TestMethod]
public void CalculateTheSumOfPrimesBelow2million()
{
int result = PrimeTester.calculateTheSumOfPrimesBelow(2000000); // 2million
Assert.AreEqual(1, result); // 1,179,908,154 .. this was what I got with an int...
// correct answer was 142,913,828,922 with a long
}
public static class PrimeTester
{
public static int calculateTheSumOfPrimesBelow(int maxPrimeBelow)
{
// we know 2 is a prime number
int sumOfPrimes = 2;
int currentNumberBeingTested = 3;
while (currentNumberBeingTested < maxPrimeBelow)
{
double squareRootOfNumberBeingTested = (double)Math.Sqrt(currentNumberBeingTested);
bool isPrime = true;
for (int i = 2; i <= squareRootOfNumberBeingTested; i++)
{
if (currentNumberBeingTested % i == 0)
{
isPrime = false;
break;
}
}
if (isPrime)
sumOfPrimes += currentNumberBeingTested;
currentNumberBeingTested += 2; // as we don't want to test even numbers
}
return sumOfPrimes;
}
}
最佳答案
关于c# - Int - 数字太大。如何让程序失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4536523/