Задача
Для заданного положительного целого $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 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <iostream> using namespace std; int main() { int a; while (cin >> a && a != 0) { int LSB = 1; // Least Significant Bit while ((a & LSB) == 0){ LSB = LSB << 1; } cout << LSB << endl; } return 0; } |
Решение
Объявляем переменную a. Начинается цикл while, условием окончания которого будет введённая a, неравная нулю. В цикле объявляем переменную LSB = 1, после чего начинается новый цикл while, который сдвигает бит LSB влево, пока выражение побитовой конъюнкции a & LSB нулевое. Соответственно, как только выражение будет ненулевым — будет найден первый общий бит, который и будет младшим битом числа a. Его и выводим.
Юль, для манипуляций с битами вместо деления и умножения на 2 лучше использовать побитовые операторы — они и быстрее, и, как мне кажется, уместнее в этой задаче.
И в тексте фрагменты кода нужно подсвечивать соответственно.
Уточню, вместо проверки if( a % 2 == 0 )можно сделать так if(! ( n & 1 ) )
Cпасибо, исправила
Чтобы вывести число и перейти на новую строку нужно именно это и сделать: cout << x << endl;
Данную задачу можно решить без внутреннего цикла за одну операцию. Предлагаю подумать над этим.