from math import log10,ceil;

class InvalidDataError(Exception):
   def __init__(self,data):
       self.Data=data;

cb=log10(2);

def getPot(n):
   pot=ceil(n.bit_length()*cb);
   
   if (n-10**pot) < 0 and (n-10**(pot-1)) >= 0:
       return pot-1;
   elif (n-10**(pot-1)) < 0 and (n-10**(pot-2)) > 0:
       return pot-2;
   else:
       raise InvalidDataError('No power number');
# end def

def getDigit(pot,n):
   dig=0;
   while (n-dig*10**pot) >= 0:
       dig+=1;
   return dig-1;
# end def

def getSumOfDigists(n):
   qs=0;
   maxPot=getPot(n);
   pot=maxPot;
   while n>0:
       # dig=getDigit(pot,n);
       dig=0;
       while (n-dig*10**pot) >= 0:
           dig+=1;
       dig+=-1;
       qs+=dig;
       n=n-dig*10**pot
       pot-=1;
   # end while
   return qs;
# end def

qs=getSumOfDigists(2**(10**5));
# 5 läuft bereits 1,5 Minuten
print(qs);

##    >>>
##    7
##    >>> ================================ RESTART ================================
##    >>>
##    115
##    >>> ================================ RESTART ================================
##    >>>
##    1366
##    >>> ================================ RESTART ================================
##    >>>
##    13561
##    >>> ================================ RESTART ================================
##    >>>
##    135178
##    >>>