, : stackstl, : Top


20 Системы счисления и представление чисел

Данный листок содержит набор задач на представление чисел в различных системах счисления.

Упражнения

(A) Hexadecimal to binary

Программа получает на вход строку, состоящую из цифр 0, ..., 9 и букв A, ..., F, являющуюся записью некоторого 16-ричного числа. Длина строки не превосходит 1000 символов, первый символ в строке не равен 0. Необходимо вывести запись этого числа в двоичном виде без лидирующих нулей.

Пример

     Ввод                       Вывод
     2F                         101111

(B) Binary to hexadecimal

Программа получает на вход строку, состоящую из нулей и единиц, длина которой не превосходит 4000 символов. Первый символ строки всегда единица. Данная строка является двоичной записью некоторого числа, которое необходимо записать в шестнадцатеричном виде и вывести с использованием цифр 0, ..., 9 и букв A, ..., F без лидирующих нулей.

Пример

     Ввод                       Вывод
     101111                      2F

(C) Universal convertor

Напишите программу, переводящую запись числа между двумя произвольными системами счисления.

На вход программа получает три величины: n, A, k, где n и k – натуральные числа от 2 до 36: основания системы счисления, A – число, записанное в в системе счисления с основанием n, A<231.

Необходимо вывести значение A в системе счисления с основанием k без лидирующих нулей.

Цифры записываются следующимим символами: 0, 1, 2, ..., 9, A, B, C, ..., Z.

Пример

     Ввод                       Вывод
     2                           2F
     101111
     16
     
     Ввод                       Вывод
     10                          Z
     35
     36

(D) Two's complement - 1

Напишите программу, которая по данным числам A и n записывает представление числа A в n-разрядном двоичном дополнительном коде.

Первая строка входных данных содержит число A, вторая строка – число n, при этом 2≤n≤16, -2n-1≤A≤2n-1-1.

Программа должна вывести строку из n символов, содержащих запись числа A в n-разрядном двоичном дополнительном коде, первый символ – старший знаковый разряд.

Пример

     Ввод                       Вывод
     5                           00000101
     8
     
     Ввод                       Вывод
     -5                          11111011
     8

(E) Two's complement - 2

Дана запись некоторого числа в двоичном дополнительном коде. Выведите десятичную запись этого числа.

Программа получает на вход строку из нулей и единиц. Длина строки не меньше 2 и не больше 16.

Программа должна вывести десятичную запись числа, записанного в этой строке в двоичном дополнительном коде.

Пример

     Ввод                       Вывод
     00000101                    5
     
     Ввод                       Вывод
     11111011                    -5

(F) Binary fraction to decimal

Дано число, записаное в виде двоичной дроби: запись может содержать цифры 0 и 1 и, возможно, одну точку. Запись содержит не более 30 символов. Необходимо вывести это значение в виде десятичной дроби (тип переменной double с точностью не менее 12 знаков).

Пример

     Ввод                       Вывод
     11.01                      3.25
     
     Ввод                       Вывод
     100                        4
     
     Ввод                       Вывод
     0.111111                   0.984375

(G) Decimal fraction to binary

Дано действительное неотрицательное число, не превосходящее 100, записанное в десятичном виде с фиксированной точкой. Необходимо представить его в виде двоичной дроби с фиксированной точкой и вывести это представление. Ответ должен отличаться от правильного не более, чем на 2-32, то есть необходимо вывести не менее 32 двоичных цифр после точки.

Пример

     Ввод                       Вывод
     3.25                      11.01
     
     Ввод                       Вывод
     4                         100
     
     Ввод                       Вывод
     0.1                       0.00011001100110011001100110011001100110011
     

(H) Binary periodical fraction to decimal

Дана запись двоичной периодической дроби, которая включает в себя:

1. Необязательную целую часть.

2. Обязательный символ точки, отделяющий целую часть от дробной.

3. Необязательную дробную непериодическую часть.

4. Необязательная периодическая дробная часть, записываемая в круглых скобках.

Необходимо определить значение этой дроби, сохранить его в переменной типа double и вывести на экран с точностью не менее 12 знаков. Общая длина входной строки не превосходит 30 символов.

Пример.

     Ввод                       Вывод
     0.(01)                      0.33333333333333
     
     Ввод                       Вывод
     11.01                       3.25
     
     Ввод                       Вывод
     10.0(101)                   2.357142857143
     

(I) Rational number to binary periodical

Дано рациональное число. Запишите его в виде двоичной периодической дроби.

На вход программа получает два натуральных числа n и m, каждое из которых не превосходит 1000. Программа должна вывести значение n/m, записанное в виде двоичной периодической дроби, при этом длинаr непериодической дробной части и длина периода должны быть минимально возможными. Если данное число является конечной двоичной дробью, периодическую часть выводить не надо.

Пример.

     Ввод                       Вывод
     1 3                         0.(01)
     
     Ввод                       Вывод
     13 4                        11.01
     
     Ввод                       Вывод
     5 14                        0.0(101)

(J) Binary periodical fraction to rational number

Дана запись двоичной дроби, как в задаче H. Необходимо представить ее в виде несократимой рациональной дроби n/m. Программа должна вывести значение n и m.

     Ввод                       Вывод
     0.(01)                      1 3
     
     Ввод                       Вывод
     11.01                       13 4
     
     Ввод                       Вывод
     0.0(101)                   5 14