Алгоритм произвольного базового преобразования для (представленных в текстовом виде) целых чисел

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

Алгоритм, который я ищу, принимает массив числовых значений в заданной базе (в основном это будет строка символов) и возвращает одинаковый результат.

Спасибо за помощь.


person Community    schedule 23.04.2012    source источник
comment
Почему вы не хотите использовать промежуточное большое целое число? Единственный другой способ, который я вижу, - это написать свои собственные операторы деления и модуля, которые работают со строками любого основания, что, вероятно, будет и медленнее, и сложнее в реализации.   -  person Kevin    schedule 23.04.2012
comment
Потому что я хочу реализовать его на собственном языке программирования, который не поддерживает арифметику с большими числами, поэтому мне придется свернуть свой собственный.   -  person    schedule 23.04.2012


Ответы (2)


Я бы сказал, что это невозможно. Для определенных оснований можно было бы преобразовать одну строку в другую, просто потоком через символы (например, если одно основание кратно другому, как восьмеричное->шестнадцатеричное), но для произвольного базы не возможно без арифметических операций.

Если бы вы сделали это со строками/символами между ними, это все еще была бы большая целочисленная арифметика, но ваши целые числа были просто в (ненужном большом) необычном формате.

Таким образом, у вас есть только выбор между: либо перепрограммировать арифметические операции с числами в кодировке char, либо выполнить шаг и использовать большую целочисленную библиотеку и пройти путь convert(char(base1->bigInt), convert(bigInt->base2).

person flolo    schedule 23.04.2012

Это вычислимо, но некрасиво.

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

person user1277476    schedule 24.04.2012