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

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

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

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

16

Решение

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

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

Пример:

1025 (десятичное число) к основанию 15:

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

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

29

Другие решения

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

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

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

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

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

2