одно целое число в десятеричной системе счисления. Вывести на стандартный вывод количество единиц, содержащихся в бинарной записи этого числа.
Условие: for и while использовать нельзя.
Что не так с этими двумя вариантами решения?)
https://scastie.scala-lang.org/scalodrome/OZVm1dJlSqSkNmeANNQqUQ/14
Можно не конвертировать число в двоичную строку, а сразу перебирать битики (обычная хвостовая рекурсия)
StdIn.readInt().toBinaryString.count(_ == '1') ?
+, можно что-то по типу такого import scala.io.StdIn @main def hello: Unit = println(StdIn.readInt().countBits()) extension (i: Int) def countBits(pos: Int = 31): Int = if pos == -1 then 0 else ((i >> pos) & 1) + countBits(pos - 1)
def bitCount(of: Int): Int = { @tailrec def go(acc: Int, pos: Int): Int = { def lastBit = of >> pos & 1 if (pos < 32) go(acc + lastBit, pos + 1) else acc } go(0, 0) }
Обсуждают сегодня