Heim > Artikel > Backend-Entwicklung > PHP-Interviewfrage (berechne die Anzahl der Einsen in einer Dezimalzahl, nachdem du sie in eine Binärzahl konvertiert hast)
Dies ist eine Interviewfrage, die mir gestern während eines Interviews begegnet ist.
Auf den ersten Blick scheint es einfach, aber im Detail lässt es sich nicht realisieren.
Als ich nach Hause kam, suchte ich auf Baidu und fand eine Antwort.
lautet wie folgt:
//计算一个十进制数转换为二进制数中‘1’的个数 //例如十进制11 = 二进制1011,则结果是3个1 //解题思路:利用 n & (n - 1) 可以将最后一个1变0 //xxxx1000 & (xxxx1000 - 1) = xxxx1000 & xxxx0111 = xxxx0000 // 1011 & (1011 - 1) = 1011 & 1010 = 1010 //直到最后一个1被与为0,得出结果 function count1($n) { $r = 0; while ($n != 0) { $r++; $n &= ($n - 1); } return $r; } echo count1(11);
Nachdem ich es gelesen hatte, hatte ich das Gefühl, dass es nicht leicht zu verstehen ist (ich bin nicht gut in Bitoperationen ...)
Ich habe eine Weile darüber nachgedacht und es gibt die folgende Lösung:
function count1($n) { $r = 0; while($n !=0) { if(($n%2) !=0 ) { $r++; } $n=$n/2; } return $r; } echo count1(8);
Das sollte viel einfacher zu verstehen sein.
Das Obige führt eine PHP-Interviewfrage ein (Berechnung der Anzahl der Einsen in einer Dezimalzahl nach der Konvertierung in eine Binärzahl), einschließlich relevanter Inhalte. Ich hoffe, dass sie für Freunde, die an PHP-Tutorials interessiert sind, hilfreich sein wird.