0
我试图解决project euler的第30个问题。欧拉项目练习30
My implementation of this problem对4次方产生良好效果,但对于5次方的回答不被网站接受。
有人可以解释我的代码中有什么问题吗?
此外,我不知道我的检查上限公式是否正常。如果不是,我会很高兴知道要解决问题。
这里是我的代码:
class P30
{
static void Main(string[] args)
{
Console.WriteLine(" " + GetMatchingNumbers(4).Sum());
Console.WriteLine(" " + GetMatchingNumbers(5).Sum());
Console.ReadLine();
}
static IEnumerable<int> GetMatchingNumbers(int power)
{
for (int i = 2; i <(power + 1)*(Math.Pow(9,power)); i++)
{
var sumOfPowers = 0;
var tempi = i;
for (int x = 0; x < power; x++)
{
sumOfPowers += (int)Math.Pow(tempi % 10, power);
tempi /= 10;
}
if (sumOfPowers == i)
{
yield return i;
Console.WriteLine("With Power {0}, {1} matches", power, i);
}
}
}
}
[编辑]我asked如果我的理论是准确的。
你是否试图用long替换int?我怀疑你的计算溢出了int的容量... – 2011-12-16 13:03:25
另外,你确定你的循环的上限?你是怎么想出这个价值的? – 2011-12-16 13:05:16