Создайте подпрограмму, которая принимает массив блоков в одной числовой базовой системе, и преобразует их в массив блоков в другой числовой базовой системе. Системы from и to являются произвольными и должны приниматься в качестве параметра. Входной массив может иметь произвольную длину (если используется язык, в котором длины массива не хранятся вместе с массивом, например C, параметр длины должен быть передан функции).
Вот как это должно работать:
fromArray = [1, 1]
fromBase = 256
toBase = 16
result = convertBase(fromArray, fromBase, toBase);
Который должен возвращаться [0, 1, 0, 1]
или возможно [1, 0, 1]
(ведущие 0
s являются необязательными, поскольку они не меняют значение ответа).
Вот несколько тестовых векторов:
Вектор проверки идентичности
fromArray = [1, 2, 3, 4] fromBase = 16 toBase = 16 result = [1, 2, 3, 4]
Тривиальный тестовый вектор
fromArray = [1, 0] fromBase = 10 toBase = 100 result = [10]
Большой тест вектор
fromArray = [41, 15, 156, 123, 254, 156, 141, 2, 24] fromBase = 256 toBase = 16 result = [2, 9, 0, 15, 9, 12, 7, 11, 15, 14, 9, 12, 8, 13, 0, 2, 1, 8]
Действительно большой тестовый вектор
fromArray = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] fromBase = 2 toBase = 10 result = [1, 2, 3, 7, 9, 4, 0, 0, 3, 9, 2, 8, 5, 3, 8, 0, 2, 7, 4, 8, 9, 9, 1, 2, 4, 2, 2, 3]
Нечетный базовый вектор
fromArray = [41, 42, 43] fromBase = 256 toBase = 36 result = [1, 21, 29, 22, 3]
Другие критерии / правила:
Все целочисленные переменные должны помещаться в стандартное 32-разрядное целое число со знаком для всех допустимых диапазонов ввода.
Вы можете преобразовать в промежуточное представление, если посредник - не более чем массив 32-битных целых чисел со знаком.
Ожидайте обработки баз со 2 по 256. Нет необходимости поддерживать более высокие базы, чем эта (но если вы хотите, во что бы то ни стало).
Ожидайте обработки входных и выходных размеров как минимум до 1000 элементов. Решение, которое масштабируется до 2 ^ 32-1 элементов, было бы лучше, но 1000 просто отлично.
Это не обязательно иметь самый короткий код, который будет соответствовать этим правилам. Речь идет о самом чистом и элегантном коде.
Теперь это не совсем тривиально, так что ответ, который почти работает, может быть принят!