Вот это прямое уравнение для этого (поэтому нет необходимости строить строку). Если s
является строкой, то длиной строки в том числе длины приложенной длиной будет:
L1 = len(s) + 1 + int(log10(len(s) + 1 + int(log10(len(s)))))
Идея заключается в том, что прямое вычисление только проблематично, когда добавляются длина будет толкать длину мимо сила десяти; то есть, в 9
, 98
, 99
, 997
, 998
, 999
, 9996
и т.д. Чтобы решить эту проблему путем, 1 + int(log10(len(s)))
это количество цифр в длине s
. Если мы добавим это к len(s)
, то 9->10
, 98->100
, 99->101
и т. Д., Но все же 8->9
, 97->99
и т. Д., Чтобы мы могли пропустить силу десяти точно по мере необходимости. То есть, добавив это, вы получите число с правильным количеством цифр после добавления. Затем снова запишите журнал, чтобы найти длину этого числа, и это ответ.
Чтобы проверить это:
from math import log10
def find_length(s):
L1 = len(s) + 1 + int(log10(len(s) + 1 + int(log10(len(s)))))
return L1
# test, just looking at lengths around 10**n
for i in range(9):
for j in range(30):
L = abs(10**i - j + 10) + 1
s = "a"*L
x0 = find_length(s)
new0 = s+`x0`
if len(new0)!=x0:
print "error", len(s), x0, log10(len(s)), log10(x0)
Как [тег: рекурсия] Здесь уместно? У вас действительно есть код? Где именно ваша проблема? – jonrsharpe
Проблема «чувствует» рекурсию по мере того, как общая длина строки изменяется, поскольку программа добавляет длину к строке. У меня нет никакого кода, потому что я не могу обернуть голову вокруг какого-либо алгоритма вообще - итеративно или иначе. – pavja2
Какая у вас самая длинная строка? Возможна общая формула, но если ваши строки имеют длину <997, то есть только 3 случая, и их проще просто написать. – tom10