fork download
  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func hitungNomorBit(angka, nomorBit int) *int {
  6. // Membuat array untuk menyimpan representasi biner
  7. biner := make([]int, 32) // Asumsi maksimal 32 bit
  8. index := 0
  9.  
  10. // Handle kasus khusus untuk angka 0
  11. if angka == 0 {
  12. if nomorBit == 0 {
  13. result := 0
  14. return &result
  15. }
  16. return nil
  17. }
  18.  
  19. // Konversi ke biner
  20. tempAngka := angka
  21. for tempAngka > 0 {
  22. biner[index] = tempAngka % 2
  23. tempAngka = tempAngka / 2
  24. index++
  25. }
  26.  
  27. // Jika nomorBit lebih besar atau sama dengan panjang biner, return nil
  28. if nomorBit >= index {
  29. return nil
  30. }
  31.  
  32. // Periksa nilai bit pada posisi yang diminta
  33. result := 0
  34. if biner[nomorBit] == 1 {
  35. // Hitung jumlah bit 1 dari posisi 0 sampai nomorBit
  36. for i := 0; i <= nomorBit; i++ {
  37. if biner[i] == 1 {
  38. result++
  39. }
  40. }
  41. } else {
  42. // Jika bit pada posisi yang diminta adalah 0
  43. // Hanya hitung jumlah bit 1 sebelumnya
  44. for i := 0; i < nomorBit; i++ {
  45. if biner[i] == 1 {
  46. result++
  47. }
  48. }
  49. }
  50.  
  51. return &result
  52. }
  53.  
  54. func main() {
  55. fmt.Printf("hitungNomorBit(13, 0) = %v\n", *hitungNomorBit(13, 0)) // Seharusnya 1
  56. fmt.Printf("hitungNomorBit(13, 1) = %v\n", *hitungNomorBit(13, 1)) // Seharusnya 1
  57. fmt.Printf("hitungNomorBit(13, 2) = %v\n", *hitungNomorBit(13, 2)) // Seharusnya 2
  58. }
Success #stdin #stdout 0s 5288KB
stdin
Standard input is empty
stdout
hitungNomorBit(13, 0) = 1
hitungNomorBit(13, 1) = 1
hitungNomorBit(13, 2) = 2