С помощью строк вообще без проблем
def f(n):
if n <=5:
return n + 15
if n % 2 == 0 and n > 5:
return f(n//2)+n*n*n-1
if n % 2 != 0 and n>5:
return f(n-1) + 2*n*n+1
if __name__ == '__main__':
count = 0
for i in range(1, 1001):
check = str(f(i))
if check.count('8') >= 2:
count += 1
print(count)
и вариант через остатки
def f(n):
if n <=5:
return n + 15
if n % 2 == 0 and n > 5:
return f(n//2)+n*n*n-1
if n % 2 != 0 and n>5:
return f(n-1) + 2*n*n+1
def calc_eight(n):
count = 0
while n:
rem = n % 10
if rem == 8:
count += 1
n = n // 10
return count
if __name__ == '__main__':
count = 0
for i in range(1, 1001):
check = f(i)
if calc_eight(check) >= 2:
count += 1
print(count)
ошибка ваша в переменно k. Она у вас показывает, сколько цифр 8 в кадом числе от 1 до 1000. И для каждого числа i она должна быть обнулена. У вас этого нет.