В моем предыдущем ответе была ошибка: посмотрите на комментарий Бена Швена.
Извините за путаницу, я нашел и объяснил ошибку, которую я сделал в моем предыдущем ответе ниже.
Пожалуйста, используйте ответ, предоставленный Полом Томблином. (переписано для использования P, Q и n)
Y = ln(P^n) / ln(Q)
Y = n * ln(P) / ln(Q)
Таким образом, Y (округленный в большую сторону) - это количество символов, которое вам нужно в системе Q, чтобы выразить наибольшее число, которое вы можете закодировать в n символов в системе P.
У меня нет ответа (который не преобразовал бы число уже и занял бы столько места во временной переменной), чтобы получить минимальный минимум для данного числа 1000 (bin) = 8 (dec), в то время как вы зарезервировали бы 2 десятичные позиции по этой формуле.
Если временное использование памяти не является проблемой, вы можете обмануть и использовать (Python):
len(str(int(otherBaseStr,P)))
Это даст вам количество десятичных знаков, необходимое для преобразования числа в базе P, приведенного в виде строки (otherBaseStr), в десятичные числа.
Старый НЕПРАВИЛЬНЫЙ ответ:
Если у вас есть число в P, система счисления длины n
Затем вы можете рассчитать максимально возможное число из n символов:
P^(n-1)
Чтобы выразить это наибольшее число в системе счисления Q, вам нужно использовать логарифмы (поскольку они обратны возведению в степень):
log((P^(n-1))/log(Q)
(n-1)*log(P) / log(Q)
Например
11000000 в двоичном коде - 8 символов.
Чтобы получить его в десятичном виде, вам потребуется:
(8-1)*log(2) / log(10) = 2.1 digits (round up to 3)
Причина, по которой это было неправильно :
Максимально возможное число из n символов:
(P^n) - 1
не
P^(n-1)