プロジェクトオイラー#4をc#で解決しようとしていますが、以前の投稿によると、c#でこの問題の解決策を見つけることができませんでした。
質問は:
回文数はどちらの方法でも同じように読めます。2 つの 2 桁の数の積から作られる最大の回文は、9009 = 91 99 です。
2 つの 3 桁の数の積から作られる最大の回文を見つけます。
以下は私のコードですが、それがどのように流れるかを見ると、私の間違いはわかりません。どうすれば修正できますか?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CS_11_project_Euler_problem_4
{
class Program
{
static void Main(string[] args)
{
int x, y;
string product="" , res="";
for (x = 100; x <= 999; x++)
{
for (y = 100; y <= 999; y++)
{
product = Convert.ToString(x*y);
if (product == new String(product.Reverse().ToArray()))
{
Console.WriteLine("X=" + x + " Y=" + y );
res = product;
Console.WriteLine("Polindrome is: " + res);
}
else { continue; }
}
}
}
}
}
私のコードが見つけた結果は 580085 です。これが私の出力のスクリーンショットです。すべての結果の回文数とその乗数が表示されます。
projecteuler.netによると、私の結果は正しくありません。私の出力の 1 つは、実際の結果を示していました。906609 . これは、私のコードの最後の回文の前の 2 番目の結果です。ネストされた for ループ内で乗数を増やすと考えるのは間違っていたと思います。これは、意図せずに「最大の X が最大の乗数ロジックを与える」に基づいていたためです。それを防ぐために、解像度と積をもう一度整数に変換し、常により大きな積を変数積に保ちます