どーも、みつおです。
最大の回文積。回文といえば、上から読んでも下から読んでも「しんぶんし」的なやつですね。
問題
左右どちらから読んでも同じ値になる数を回文数という. 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