CodeIQ バイナリカウント問題

今回、講義中暇だったので、バイナリカウント問題を解いたので、公開しておきます〜!
挑戦者求む!数学の問題をプログラミングで解こう!二進数の1の個数を数えて下さい。 by @riverplus Kawazoe│CodeIQcodeiq.jp

$n=<STDIN>;
$two=1;
$i=0;
$ans=0;
while(1){
        $i++;
        $ans+=int($n/($two*2))*$two;
        if($n % ($two*2)<$two){$ans+=($n % ($two*2))}
        else{$ans+=$two}
        $n-=$two;
        $two*=2;
        if($n<=0){last}
}
print $ans."\n";

スッキリ書けてるかな???