C Быстрое базовое преобразование из десятичного в троичное - PullRequest
2 голосов
/ 29 апреля 2011

есть ли способ заменить десятичное число на троичное? Я имею в виду, я не хочу использовать метод деления по модулю, у меня очень большое десятичное число, что-то вроде 128123832812381835828638486384863486 ............. 1237127317237 и так далее.

Также не хочу использовать bigints.

Есть ли способ?

1 Ответ

4 голосов
/ 29 апреля 2011

Вам не нужно использовать деление / по модулю. Вместо этого переберите входные цифры от низкого до высокого. Для каждой позиции цифры сначала рассчитайте, что 1000....000 будет в выходном представлении (это в 10 раз больше предыдущей степени 10). Затем умножьте этот результат на цифру и соберите в выходное представление.

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

Пример:

Преобразование 246 (база-10) в базу-3.

Начните с инициализации выхода "аккумулятор" a = "0".

Инициализировать "множитель" m = "1".

Также обратите внимание, что 10 - это "101" в выходном представлении.

Первая цифра 6 , то есть d = "20".

  • Умножить: t = d * m = "20" * "1" = "20".
  • Накопить: a = a + t = "0" + "20" = "20".
  • Множитель обновления: m = m * "101" = "1" * "101" = "101".

Вторая цифра 4 , то есть d = "11".

  • Умножить: t = d * m = "11" * "101" = "1111".
  • Накопить: a = a + t = "20" + "1111" = "1201".
  • Обновить множитель: m = m * "101" = "101" * "101" = "10201".

Третья цифра - 2 , то есть d = "2".

  • Умножить: t = d * m = "2" * "10201" = "21102".
  • Накопить: a = a + t = "1201" + "21102" = "100010".

Таким образом, ответ "100010".

...