e-olymp 1753. Младший бит

Задача

Для заданного положительного целого $A$ $(1 \leq A \leq 100),$ вывести младший бит $A$.

Например, если $A = 26$, то его мы можем записать в двоичном виде, как $11010$, и младший бит $A$ есть $10$, и на выходе должно быть $2.$

Другой пример выглядит следующим образом: при $A = 88$, это число $A$ мы можем записать в двоичной форме $1011000$, младший бит в $A$ есть $1000,$ и на выходе должно быть $8.$

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

Каждая строка входных данных содержит только одно целое число $A$ $(1 \leq A \leq 100).$ Строка, содержащая «0» означает конец ввода, и эта строка не является частью входных данных.

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

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

Тесты

Входные данные Выходные данные
 1 26
88
0
2
8
 2 99
45
66
20
1
1
2
4
 3 100
0
6
4
4 66
33
98
42
84
39
2
1
2
2
4
1

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

Решение

Объявляем переменную  a. Начинается цикл while, условием окончания которого будет введённая  a, неравная нулю. В цикле объявляем переменную  LSB = 1, после чего начинается новый цикл while, который сдвигает бит LSB  влево, пока выражение побитовой конъюнкции  a & LSB нулевое. Соответственно, как только выражение будет ненулевым — будет найден первый общий бит, который и будет младшим битом числа a. Его и выводим.

Ссылки

5 thoughts on “e-olymp 1753. Младший бит

  1. Юль, для манипуляций с битами вместо деления и умножения на 2 лучше использовать побитовые операторы — они и быстрее, и, как мне кажется, уместнее в этой задаче.
    И в тексте фрагменты кода нужно подсвечивать соответственно.

    • Нет, Юля, особенности e-olymp тут не причем. Никакой -1 и проверка условия Вам не нужны. Даже удивительно, как Вы ухитрились так запутаться 🙂
      Чтобы вывести число и перейти на новую строку нужно именно это и сделать: cout << x << endl;
    • Переменную x лучше объявить ближе к месту её использования. Например, при первом упоминании. Только дайте ей осмысленное имя. Это ведь «младший бит»?

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