【发布时间】:2013-08-22 14:38:54
【问题描述】:
我发现了几个与这个问题相关的主题,我只想知道为什么我的代码返回不正确的数据。 所以我们必须找到第一个具有超过 500 个除数的三角形数。详情可以在这里找到:http://projecteuler.net/problem=12 这是我的代码:
Int64 triangularnum = 1;
for (Int64 num = 2; num > 0; num++)
{
if(has501Divisors(triangularnum))
{
MessageBox.Show(triangularnum.ToString());
break;
}
triangularnum += num;
}
private bool has501Divisors(Int64 candidate)
{
bool has501 = false;
int count = 0;
for (int i = 1; i < Math.Sqrt(candidate); i++)
{
if (candidate % i == 0) count += 1;
if (count > 501)
{
return true;
}
}
return has501;
}
这给了我号码 842161320,这显然是不正确的。
【问题讨论】:
-
您可以编写一个名为“CountDivisors”的方法,而不是编写一个方法“Has501Divisors”。通过在小数上测试和调试该方法,您很快就会发现您犯了一个错误并且低估了除数。学习如何有效地将问题分解为可测试的子系统是一项对您未来很有帮助的技能。
标签: c# triangle-count