7

回文数はどちらの方法でも同じように読めます。2 桁の数を 2 つ掛け合わせた最大の回文は、9009 = 91 × 99 です。

2 つの 3 桁の数の積から作られる最大の回文を見つけます。

解決策を見つけるためにこのコードを作成しましたが、Project Euler Web サイトの回答はまだ正しくありません:

function Palindromic(x) {
    var pal = parseInt(x.toString().split('').reverse().join(''));

    if (pal === x)
        return true;
    else
        return false;
}

var x = 100,
    y = 100,
    product = x * y;

for (x; x <= 999; x++) {
    for (y = x; y <= 999; y++) {
        product = x * y;
        if (Palindromic(product)) {
            console.log(x + '*' + y + '=' + product);
        }
    }
}

私のコードに問題がありますか?! とにかく、私が得た答えは 924*962 から 888888 でした

4

6 に答える 6

-2

これは非常に遅い回答ですが、別のアプローチを提案します。これは十分な解決策であり、完全な解決策ではありません

私は6桁の回文だけをチェックしました。

1.最大から6桁の回文のみを生成する(上3桁、下3桁を逆にする)

2. 生成された回文の数字が因数として 2 つの 3 桁の数字を持っているかどうかを確認します。はいの場合、2 つの 3 桁の数の積によって生成できる最大の回文である数字を返します。C# でのコード サンプル。

    static void Main(string[] args)
    {
        Console.WriteLine(SixDigitPalindromeWithDivisor().ToString());
        Console.ReadLine();
    }

    public static int SixDigitPalindromeWithDivisor()
    {
        for (int i = 999; i > 100; i--)
        {
            //generating palindrome number from max
            var palindromeInt = Int32.Parse(Convert.ToString(i) + ReverseString(Convert.ToString(i)));

            //checking three digit number factor exist
            if (CheckThreeDigitDivisorExists(palindromeInt))
            {
                return palindromeInt;
            }
        }
        return 0;
    }

    public static bool CheckThreeDigitDivisorExists(int number)
    {
        for (int i = 999; i > 100; i--)
        {
            if (number % i == 0)
            {
                if (number / i <= 999)
                {
                    return true;
                }
            }
        }
        return false;
    }

    public static string ReverseString(string s)
    {
        char[] arr = s.ToCharArray();
        Array.Reverse(arr);
        return new string(arr);
    }
于 2017-05-05T10:33:05.590 に答える