Поскольку в языке Питон встроенная целочисленная арифметика является длинной, то создается иллюзия того, что целые
числа имеют бесконечное число разрядов. При этом у положительных чисел лидирующие разряды в двоичной системе счисления
заполнены битом 0, а у отрицательных чисел — битом 1.
Этот факт мы будем записывать следующим образом: символы “0~
” будут обозначать бесконечное
число нулевых бит, а символы “1~
” бесконечное число единичных бит. То есть число 5 в дополнительном
коде мы будем записывать, как 0~101
, а число -5 как 1~011
.
При этом бит, следующий после знака ~
должен отличаться от бита, идущего до него, то
есть запись 0~0101
или 1~11011
считается неправильной. Исключениями
являются числа 0 (записывается как 0~0
) и -1 (записыватеся как 1~1
).
Дана запись ненулевого числа в дополнительном коде, в соответствии с указанным выше форматом. Определите значение записанного числа.
Ввод | Вывод |
---|---|
0~101 |
5 |
1~011 |
-5 |
Решите задачу, обратную предыдущей.
Ввод | Вывод |
---|---|
5 |
0~101 |
-5 |
1~011 |
Дано неотрицательное число, записанное в виде двоичной дроби: запись содержит только цифры 0 и 1 и, возможно, точку. Запись числа содержит не более 30 символов. Переведите это значение в величину типа float и выведите результат.
Ввод | Вывод |
---|---|
11.01 |
3.25 |
100 |
4 |
0.111111 |
0.984375 |
Дано действительное неотрицательное число, не превосходящее 100, записанное в десятичном виде с фиксированной точкой. Необходимо представить его в виде двоичной дроби с фиксированной точкой и вывести это представление. Ответ должен отличаться от верного не более, чем на 2-32 степени, поэтому необходимо вывести не менее 32 двоичных цифр после точки.
Ввод | Вывод |
---|---|
3.25 |
11.01 |
4 |
100 |
0.1 |
0.00011001100110011001100110011001100110011 |
Дана запись двоичной периодической дроби, которая включает в себя:
Переведите значение этой дроби в величину типа float и выведите результат. Общая длина входной строки не превосходит 30 символов.
Ввод | Вывод |
---|---|
0.(01) |
0.33333333333333 |
11.01 |
3.25 |
10.0(101) |
2.357142857143 |
Дано рациональное число. Запишите его в виде двоичной периодической дроби.
На вход программа получает два натуральных числа n и m, каждое из которых не превосходит 1000. Программа должна вывести значение n/m, записанное в виде двоичной периодической дроби, при этом длина непериодической дробной части и длина периода должны быть минимально возможными. Если данное число является конечной двоичной дробью, периодическую часть выводить не надо.
Формат вывода двоичной дроби соответствует предыдущей задаче.
Ввод | Вывод |
---|---|
1 3 |
0.(01) |
13 4 |
11.01 |
5 14 |
0.0(101) |
Дана запись двоичной периодической дроби. Необходимо представить ее в виде несократимой рациональной дроби n/m. Программа должна вывести значения n и m.
Ввод | Вывод |
---|---|
0.(01) |
1 3 |
11.01 |
13 4 |
0.0(101) |
5 14 |