Project Euler にチャレンジ:Problem 4 PHPでの解答

← Problem 3  Problem 5 →
回文数か否かチェックの方法がもう少しいい方法がありそう。
<?php

$answer = 0;

// 3桁の積ならば、答えは5桁か6桁になる

for($i = 100 ; $i < 1000 ; $i++)
{
	for($j = 100 ; $j < 1000 ; $j++)
	{
		if( check($i * $j) and $answer < $i * $j)
		{
			$answer = $i * $j;
		}
	}
}
echo $answer;

function check($num)
{
	$flag = false;
	if($num < 100000)// 5桁の場合
	{
		// 1桁目と5桁目、2桁目と4桁目が同じ数字なら回文	
		if($num % 10 == (int)($num / 10000) and (int)($num % 100 / 10) == (int)($num % 10000 / 1000) )
		{
			$flag = true;
		}
	}
	else// 6桁の場合
	{
		// 1桁目と6桁目、2桁目と5桁目、3桁目と4桁目が同じ数字なら回文	
		if($num % 10 == (int)($num / 100000) and (int)($num % 100 / 10) == (int)($num % 100000 / 10000) and (int)($num % 1000 / 100) == (int)($num % 10000 / 1000)) 
		{
			$flag = true;
		}
	}
	return $flag;
}

?>
問題文