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"
,