トップページに戻る    次のPHPのサンプルへ    前のPHPのサンプルへ

Q09 ナルシシストな8進数


PHPのソース

<?php

$AnswerCnt = 0;
for($I = 1; $I <= PHP_INT_MAX ; $I++){
    $OctValue = base_convert(strval($I) , 10 , 8);
    $Len = strlen($OctValue);
    if($Len < 2) continue;

    $CurrNum = intval($OctValue);

    $SumVal = 0;
    while($CurrNum > 0){
        $ModVal = $CurrNum % 10;
        $SumVal += pow($ModVal , $Len);
        $CurrNum = ($CurrNum - $ModVal) / 10;
    }

    if($SumVal == $I){
        echo "ナルシシスト数{$OctValue}を発見";
        echo PHP_EOL;
        if(++$AnswerCnt == 8){
            break;
        }
    }
}


実行結果

ナルシシスト数24を発見
ナルシシスト数64を発見
ナルシシスト数134を発見
ナルシシスト数205を発見
ナルシシスト数463を発見
ナルシシスト数660を発見
ナルシシスト数661を発見
ナルシシスト数40663を発見


解説

base_convert関数で、10進数から8進数に変換してます。