Блок задач

3. Структуры данных

Темы
Сложность 5

Задача «Сложение чисел в разных системах счисления»

Разработать функцию, принимающую два числа в виде списка (вектора) цифр в одной системе счисления, и возвращающую число — результат сложения.в виде списка (вектора) цифр в другой системе счисления.

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

Текстовый файл:

<ситема_A>: <цифра_A1>, <цифра_A2>, ... <цифра_AN>
<ситема_B>: <цифра_B1>, <цифра_B2>, ... <цифра_BM>
<ситема_C>
  • система A, B — системы счисления входных чисел
  • цифра A1..AN и цифра B1..BN — запись входных чисел в виде набора цифр от старшего разряда к младшему
  • система C — система счисления результата сложения

Пример: сложить FF16 и HELLO36, результат вывести в двоичной системе счисления

16: 15, 15
36: 17, 14, 21, 21, 24
2

Задача

Реализовать функцию

std::vector<int> plus(const std::vector<int> &A, int baseA, 
                      const std::vector<int> &B, int baseB, int baseResult);

… реализующую сложение чисел в различных системах счисления, и возвращающую результат в требуемой системе счисления.

Альтернативный синтаксис с использованием списков:

std::list<int> plus(const std::list<int> &A, int baseA, 
                    const std::list<int> &B, int baseB, int baseResult);

Функция должна проверять исходные данные на корректность и возвращать пустой список (вектор) в случае обнаружения ошибок.

Помимо основной функции, потребуется также реализовать функции чтения и записи списка (вектора) чисел, а также разбор файла с входными данными.

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

Файл с результатом в виде списка цифр в том же формате записи как и исходные данные. Приведенный выше пример должен дать следующий ответ:

1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1

Тестирование

Для основной функции plus должен быть создан набор тестов, проверяющих корректность вычислений на наборе примеров, а также проверяющий корректность поведения в случае некорректных исходных данных. Приветствуется также тестирование функций ввода/вывода.

Вариант усложнения

Дополнительно реализовать поддержку записи исходных данных для систем счисления от 2 до 36 в виде строки. Пример выше будет записан в этом случае в более понятной форме:

16: "FF"
36: "HELLO"
2

Аналогично и результат

"1101111100001011011011011"