e-olymp 2817. Двоичные числа

Задача

Для заданного положительного целого числа $n$, распечатать позиции всех $1$ в двоичном его представлении. Позиция младшего бита имеет номер $0$.
Позиции $1$ в двоичном представлении числа $13$ — это $0$, $2$, $3$.
Напишите программу, которая для каждого набора данных:

  • читает натуральное число $n$,
  • вычисляет позиции $1$ в двоичном представлении $n$,
  • выводит результат.

Входные данные

В первой строке входного файла содержится одно натуральное число $d$, указывающее количество наборов входных данных, $1 \leq d \leq 10$. Входные данные заданы ниже.

Каждый набор данных состоит ровно из одной строки, содержащей ровно одно целое число $n$, $0 \leq n \leq 10^6$.

Выходные данные

Вывод должен состоять ровно из $d$ строк — по одной строке для каждого набора входных данных.

Строка $i$, $1 \leq i \leq d$, должна содержать возрастающую последовательность целых чисел, разделенных одним пробелом — позиции $1$ в двоичном представлении $i$-го числа, полученного во входных данных.

Тесты

 

Входные данные
Выходные данные
$3$
$17$
$7$
$5$
$0$ $4$
$0$ $1$ $2$
$0$ $2$
$4$
$1945$
$1337$
$1000000$
$999999$
$0$ $3$ $4$ $7$ $8$ $9$ $10$
$0$ $3$ $4$ $5$ $8$ $10$
$6$ $9$ $14$ $16$ $17$ $18$ $19$
$0$ $1$ $2$ $3$ $4$ $5$ $9$ $14$ $16$ $17$ $18$ $19$
$10$
$0$
$1$
$2$
$3$
$4$
$5$
$6$
$7$
$8$
$9$
$0$
$1$
$0$ $1$
$2$
$0$ $2$
$1$ $2$
$0$ $1$ $2$
$3$
$0$ $3$

Код программы

Решение задачи

Для решения этой задачи нужно понять, что остаток от деления $n$ на $2$ это последняя цифра в двоичном коде числа $n$, а деление целочисленной переменной $n$ на $2$ это отбрасывание последней цифры в двоичном коде. Цикл с счетчиком $i$ до момента, как $n$ не станет равняться $0$, очевиден, как и внешний цикл от $0$ до $d$, который реализовывает $d$ итераций ввода числа $n$. Стоит отметить, что тесты на e-olymp (все, кроме первого) чувствительны к пробелам в конце строки, из-за чего появляется необходимость каким-то образом его избежать.

Ссылки

Условие задачи на e-olymp
Код решения на ideone.com

2 thoughts on “e-olymp 2817. Двоичные числа

    • Вы пишите: «не обязательно сначала преобразовать число в десятичную форму». Числа хранятся в двоичном представлении. В десятичное представление их автоматически переводят некоторые функции, например ввода-вывода. Т.е. тогда, когда их нужно показать человеку, который привык к десятичному представлению. Т.е. меня смущает «не обязательно». Это просто ненужно. Я даже не могу предположить зачем это могло бы понадобиться в задаче про двоичное представление целого числа.
    • Второй код со строками заставляет предположить, что вы путаете слова десятичный (decimal) и двоичный (binary). Возможно в этом разгадка тайны из предыдущего замечания.
    • Второй код отличается от первого тем, что после вычисления позиции очередной единицы Вы ее не печатаете, а выполняете кучу бессмысленных циклических камланий со строками, а потом все равно печатаете. Зачем?
    • Да, действительно я как-то перепутал слово binary и decimal. Даже не заметил это, за все время. Немного стыдно, но уже исправил, будто и не было.

      Действительно, превосходства второго кода над первым нет. Единственное что, в нем отделен процесс преобразования из десятичной в двоичную и вывода. Лучше тогда оставлю только первый.

Добавить комментарий