Преобразование базы 10 в базовое n

Я пытаюсь написать программу на С++, которая выполняет базовые преобразования.

Я хочу преобразовать десятичное число ко всем другим целочисленным базам от 2 до 20.

Есть ли эффективный и простой в реализации алгоритм для базовых преобразований?

Ответы

Ответ 1

Я не понимаю, где именно проблема? Это очень просто и просто, чтобы сделать базовое преобразование: вы делаете это так, как вручную.

  • разделите число по базе
  • запишите оставшуюся часть
  • повторите процесс с целой частью деления
  • остановка при достижении нуля
  • остатки в обратном порядке дают вам цифры в базе

Пример:

1025 (десятичный) до основания 15:

1025 / 15 = 68 , remainder 5
68   / 15 =  4 , remainder 8
4    / 15 =  0 , remainder 4

Число в базе 15 составляет 485

Ответ 2

У вас могут быть две проблемы:

  • Разбор с исходной базы на собственное целочисленное представление компьютера (strtol неплохо в этом).

  • Форматирование на новую базу. (itoa неплохо).

Если вы хотите написать его самостоятельно, вам может понравиться функция div. Вы загружаете число и базу, и он отделяет самую правую цифру. Повторите, чтобы получить все цифры.

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