C#でプロジェクトオイラーを解く(問題4「最大の回文積」)

プロジェクトオイラー
Pocket

どーも、みつおです。

最大の回文積。回文といえば、上から読んでも下から読んでも「しんぶんし」的なやつですね。

問題

左右どちらから読んでも同じ値になる数を回文数という. 2桁の数の積で表される回文数のうち, 最大のものは 9009 = 91 × 99 である.

では, 3桁の数の積で表される回文数の最大値を求めよ.

出典:Problem4

解答

using System;
using System.Linq;

namespace Problem4
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Solve());
            Console.ReadLine();
        }

        private static int Solve()
        {
            int ret = 0;
            int sanketa = 999;
            int sanketamax = sanketa * sanketa;

            //3桁の積の最大値からループ
            for(int i = sanketamax; 0 < i; i--)
            {
                //回文か判定
                if (IsKaibun(i))
                {
                    //3桁の積か判定
                    if (IsSeki(i))
                    {
                        ret = i;
                        break;
                    }
                }
            }

            return ret;
        }

        private static bool IsKaibun(int no)
        {
            //数値を文字列に変換
            string s = no.ToString();

            //文字列を反転し、等しいか判定
            return s.Reverse().SequenceEqual(s);
        }

        private static bool IsSeki(int no)
        {
            //3桁の数値でループ
            for(int i = 999; 100 < i; i--)
            {
                //3桁の数値で割り切れるか判定
                if(no % i == 0)
                {
                    int sahen = no / i;

                    //3桁かどうか判定 3桁ならtrueを返す
                    if (100 <= sahen && sahen <= 999) return true;
                }
            }

            //3桁でないならfalseを返す
            return false;
        }
    }
}

 

出力

906609

コメント

タイトルとURLをコピーしました