project eulerの30番目の問題を解決しようとしています。プロジェクトオイラー演習30
My implementation of this problemは4乗で良好な結果が得られますが、5乗の答えはサイトで受け入れられません。
誰かが自分のコードで何が間違っているか説明できますか?
また、上限をチェックするための自分の計算式が正しいかどうかはわかりません。そうでない場合、私は良い解決策を知っていただければ幸いです。私の理論が正確であるならば、私はaskedをした
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);
}
}
}
}
[編集]:ここ
は私のコードです。
intをlongに置き換えようとしましたか?私はあなたの計算が整数の容量をオーバーフローしていると思わ... –
また、あなたのループの上限については確かですか?どのようにこの価値を考え出しましたか? –
@ThomasLevesque:オーバーフローはありません... –