我之前的回答有一个错误:看看 Ben Schwehn 的评论。对不起,我发现并解释了我在下面的上一个答案中犯的错误。
请使用 Paul Tomblin 提供的答案。(改写为使用 P、Q 和 n)
Y = ln(P^n) / ln(Q)
Y = n * ln(P) / ln(Q)
所以 Y(向上取整)是您在系统 Q 中需要的字符数,以表示您可以在系统 P 中用 n 个字符编码的最高数。
我没有答案(这不会转换数字并在临时变量中占用那么多空间)以获得给定数字 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)