C Быстрое базовое преобразование из десятичного в троичное

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

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

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

1 ответ

Решение

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

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

Пример:

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

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

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

Обратите внимание, что 10 "101" в выходном представлении.

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

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

Вторая цифра 4, которая d = "11",

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

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

  • Multiply: t = d * m = "2" * "10201" = "21102",
  • Накапливать a = a + t = "1201" + "21102" = "100010",

Так что ответ "100010",

Другие вопросы по тегам