<?php
function hitungNomorBit(int $angka, int $nomorBit): ?int {
if ($angka < 0 || $nomorBit < 0) return null;
// Konversi manual desimal ke biner (dari MSB ke LSB)
$biner = [];
while ($angka > 0) {
$angka = intdiv($angka, 2);
}
// Jika nomorBit tidak ada, return null
if ($nomorBit >= count($biner)) { return null;
}
// Hitung jumlah bit 1 dari posisi nomorBit sampai akhir (ke kanan)
$jumlah = 0;
for ($i = $nomorBit; $i < count($biner); $i++) { if ($biner[$i] === 1) {
$jumlah++;
}
}
return $jumlah;
}
// Fungsi cetak hasil dengan format sesuai soal
function tampilkanHasil($angka, $nomorBit) {
$hasil = hitungNomorBit($angka, $nomorBit);
echo "hitungNomorBit($angka, $nomorBit) = NULL\n";
} else {
echo "hitungNomorBit($angka, $nomorBit) = $hasil\n";
}
}
// Tes sesuai soal
tampilkanHasil(13, 0); // → 1
tampilkanHasil(13, 1); // → 3
tampilkanHasil(13, 2); // → NULL
PD9waHAKCmZ1bmN0aW9uIGhpdHVuZ05vbW9yQml0KGludCAkYW5na2EsIGludCAkbm9tb3JCaXQpOiA/aW50IHsKICAgIGlmICgkYW5na2EgPCAwIHx8ICRub21vckJpdCA8IDApIHJldHVybiBudWxsOwoKICAgIC8vIEtvbnZlcnNpIG1hbnVhbCBkZXNpbWFsIGtlIGJpbmVyIChkYXJpIE1TQiBrZSBMU0IpCiAgICAkYmluZXIgPSBbXTsKICAgIHdoaWxlICgkYW5na2EgPiAwKSB7CiAgICAgICAgYXJyYXlfdW5zaGlmdCgkYmluZXIsICRhbmdrYSAlIDIpOwogICAgICAgICRhbmdrYSA9IGludGRpdigkYW5na2EsIDIpOwogICAgfQoKICAgIC8vIEppa2Egbm9tb3JCaXQgdGlkYWsgYWRhLCByZXR1cm4gbnVsbAogICAgaWYgKCRub21vckJpdCA+PSBjb3VudCgkYmluZXIpKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLy8gSGl0dW5nIGp1bWxhaCBiaXQgMSBkYXJpIHBvc2lzaSBub21vckJpdCBzYW1wYWkgYWtoaXIgKGtlIGthbmFuKQogICAgJGp1bWxhaCA9IDA7CiAgICBmb3IgKCRpID0gJG5vbW9yQml0OyAkaSA8IGNvdW50KCRiaW5lcik7ICRpKyspIHsKICAgICAgICBpZiAoJGJpbmVyWyRpXSA9PT0gMSkgewogICAgICAgICAgICAkanVtbGFoKys7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkanVtbGFoOwp9CgovLyBGdW5nc2kgY2V0YWsgaGFzaWwgZGVuZ2FuIGZvcm1hdCBzZXN1YWkgc29hbApmdW5jdGlvbiB0YW1waWxrYW5IYXNpbCgkYW5na2EsICRub21vckJpdCkgewogICAgJGhhc2lsID0gaGl0dW5nTm9tb3JCaXQoJGFuZ2thLCAkbm9tb3JCaXQpOwogICAgaWYgKGlzX251bGwoJGhhc2lsKSkgewogICAgICAgIGVjaG8gImhpdHVuZ05vbW9yQml0KCRhbmdrYSwgJG5vbW9yQml0KSA9IE5VTExcbiI7CiAgICB9IGVsc2UgewogICAgICAgIGVjaG8gImhpdHVuZ05vbW9yQml0KCRhbmdrYSwgJG5vbW9yQml0KSA9ICRoYXNpbFxuIjsKICAgIH0KfQoKLy8gVGVzIHNlc3VhaSBzb2FsCnRhbXBpbGthbkhhc2lsKDEzLCAwKTsgLy8g4oaSIDEKdGFtcGlsa2FuSGFzaWwoMTMsIDEpOyAvLyDihpIgMwp0YW1waWxrYW5IYXNpbCgxMywgMik7IC8vIOKGkiBOVUxMCg==