問題

CodeIQ

コード

  • いくつまでの数字でという条件が無いのでとりあえずチェックするクラスだけ
<?php

$n = array(42, 52);
foreach ($n as $num) {
    echo "{$num} : ", Comp::match($num) ? 'o' : 'x', "\n";
}

class Comp
{
    public static function match($n)
    {
        return self::countdec($n) === self::countbcd($n);
    }

    private static function countdec($n)
    {
        $num = $n;
        $cnt = 0;
        while ($num > 0) {
            //$cnt += $num % 2;
            //$num /= 2;
            $cnt += $num & 0b1;
            $num >>= 2;
        }
        return $cnt;
    }

    private static function countbcd($n)
    {
        $num = (string)$n;
        $cnt = 0;
        for ($i = 0; $i < strlen($num); $i++) {
            $cnt += self::countdec($num[$i]);
        }
        return $cnt;
    }
}

結果

42 : x
52 : o

  • Prev