fork download
  1. package main
  2.  
  3. import (
  4. "bufio"
  5. "fmt"
  6. "os"
  7. "strconv"
  8. "strings"
  9. )
  10.  
  11. func ekstrakBit(angka int) []int {
  12. var bit []int
  13. if angka == 0 {
  14. return []int{0}
  15. }
  16. for angka > 0 {
  17. sisaBit := angka & 1
  18. bit = append(bit, sisaBit)
  19. angka = angka >> 1
  20. }
  21. return bit
  22. }
  23.  
  24. func hitungNomorBit(angka int, nomorBit int) *int {
  25. bit := ekstrakBit(angka)
  26.  
  27. indeksGrup := -1
  28. i := 0
  29. for i < len(bit) {
  30. if bit[i] == 1 {
  31. panjang := 0
  32. for i < len(bit) && bit[i] == 1 {
  33. panjang++
  34. i++
  35. }
  36. indeksGrup++
  37.  
  38. if indeksGrup == nomorBit {
  39. nilai := (1 << uint(panjang)) - 1
  40. return &nilai
  41. }
  42. } else {
  43. i++
  44. }
  45. }
  46.  
  47. return nil
  48. }
  49.  
  50. func main() {
  51. reader := bufio.NewReader(os.Stdin)
  52. baca := func() string {
  53. s, _ := reader.ReadString('\n')
  54. return strings.TrimSpace(s)
  55. }
  56. q, _ := strconv.Atoi(baca())
  57. for i := 0; i < q; i++ {
  58. bagian := strings.Fields(baca())
  59. angka, _ := strconv.Atoi(bagian[0])
  60. nomorBit, _ := strconv.Atoi(bagian[1])
  61.  
  62. hasil := hitungNomorBit(angka, nomorBit)
  63. if hasil == nil {
  64. fmt.Println("null")
  65. } else {
  66. fmt.Println(*hasil)
  67. }
  68. }
  69. }
Success #stdin #stdout 0s 5312KB
stdin
3
13 0
13 1
13 2
stdout
1
3
null