<?php
function hitungNomorBit(int $angka, int $nomorBit): ?int {
if ($angka < 0 || $nomorBit < 0) return null;
// Konversi ke biner manual, hasil MSB → LSB
$biner = [];
while ($angka > 0) {
$angka = intdiv($angka, 2);
}
$panjang = count($biner);
// Jika nomorBit lebih dari panjang biner
if ($nomorBit >= $panjang) {
return null;
}
// Hitung index dari kiri: posisi = panjang - 1 - nomorBit
$startIndex = $panjang - 1 - $nomorBit;
// Hitung jumlah 1 dari index itu sampai ke kiri
$jumlah = 0;
for ($i = $startIndex; $i >= 0; $i--) {
if ($biner[$i] === 1) {
$jumlah++;
}
}
return $jumlah;
}
// Format output seperti soal
function tampilkanHasil($angka, $bit) {
$hasil = hitungNomorBit($angka, $bit);
if ($hasil === null) {
echo "hitungNomorBit($angka, $bit) = NULL\n";
} else {
echo "hitungNomorBit($angka, $bit) = $hasil\n";
}
}
// Tes sesuai soal
tampilkanHasil(13, 0); // => 1
tampilkanHasil(13, 1); // => 3
tampilkanHasil(13, 2); // => NULL
PD9waHAKCmZ1bmN0aW9uIGhpdHVuZ05vbW9yQml0KGludCAkYW5na2EsIGludCAkbm9tb3JCaXQpOiA/aW50IHsKICAgIGlmICgkYW5na2EgPCAwIHx8ICRub21vckJpdCA8IDApIHJldHVybiBudWxsOwoKICAgIC8vIEtvbnZlcnNpIGtlIGJpbmVyIG1hbnVhbCwgaGFzaWwgTVNCIOKGkiBMU0IKICAgICRiaW5lciA9IFtdOwogICAgd2hpbGUgKCRhbmdrYSA+IDApIHsKICAgICAgICBhcnJheV91bnNoaWZ0KCRiaW5lciwgJGFuZ2thICUgMik7CiAgICAgICAgJGFuZ2thID0gaW50ZGl2KCRhbmdrYSwgMik7CiAgICB9CgogICAgJHBhbmphbmcgPSBjb3VudCgkYmluZXIpOwoKICAgIC8vIEppa2Egbm9tb3JCaXQgbGViaWggZGFyaSBwYW5qYW5nIGJpbmVyCiAgICBpZiAoJG5vbW9yQml0ID49ICRwYW5qYW5nKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLy8gSGl0dW5nIGluZGV4IGRhcmkga2lyaTogcG9zaXNpID0gcGFuamFuZyAtIDEgLSBub21vckJpdAogICAgJHN0YXJ0SW5kZXggPSAkcGFuamFuZyAtIDEgLSAkbm9tb3JCaXQ7CgogICAgLy8gSGl0dW5nIGp1bWxhaCAxIGRhcmkgaW5kZXggaXR1IHNhbXBhaSBrZSBraXJpCiAgICAkanVtbGFoID0gMDsKICAgIGZvciAoJGkgPSAkc3RhcnRJbmRleDsgJGkgPj0gMDsgJGktLSkgewogICAgICAgIGlmICgkYmluZXJbJGldID09PSAxKSB7CiAgICAgICAgICAgICRqdW1sYWgrKzsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRqdW1sYWg7Cn0KCi8vIEZvcm1hdCBvdXRwdXQgc2VwZXJ0aSBzb2FsCmZ1bmN0aW9uIHRhbXBpbGthbkhhc2lsKCRhbmdrYSwgJGJpdCkgewogICAgJGhhc2lsID0gaGl0dW5nTm9tb3JCaXQoJGFuZ2thLCAkYml0KTsKICAgIGlmICgkaGFzaWwgPT09IG51bGwpIHsKICAgICAgICBlY2hvICJoaXR1bmdOb21vckJpdCgkYW5na2EsICRiaXQpID0gTlVMTFxuIjsKICAgIH0gZWxzZSB7CiAgICAgICAgZWNobyAiaGl0dW5nTm9tb3JCaXQoJGFuZ2thLCAkYml0KSA9ICRoYXNpbFxuIjsKICAgIH0KfQoKLy8gVGVzIHNlc3VhaSBzb2FsCnRhbXBpbGthbkhhc2lsKDEzLCAwKTsgLy8gPT4gMQp0YW1waWxrYW5IYXNpbCgxMywgMSk7IC8vID0+IDMKdGFtcGlsa2FuSGFzaWwoMTMsIDIpOyAvLyA9PiBOVUxMCg==