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

← Problem 62  Problem 64 →
<?php
// 10^n の時点で、必ず桁数はn より大きくなる。
// pow だと桁あふれするので、無理やり解く。

$num = 1;
$answer = 0;
$before = 0;

while(true)
{
	$i = 9;
	while($i > 0)
	{
		$pow1 = 1;
		$pow2 = 0;
		for($j = 1 ; $j <= $num ; $j++)
		{
			$pow1 *= $i;
			$pow2 *= $i;
			while($pow1 > 100000000000000000)
			{
				$pow2 ++;
				$pow1 -= 100000000000000000;
			}
		}
		if($pow2 != 0)
		{
			$strlen = strlen($pow1) + strlen($pow2);
		}
		else
		{
			$strlen = strlen($pow1);
		}
		if($strlen == $num)
		{
			$answer++;
		}
		else if($strlen < $num)
		{
			break;
		}
		$i--;
	}
	if($before == $answer)
	{
		break;
	}
	$before = $answer;
	$num++;
}
echo $answer."\n";

?>
問題文