Условие задачи
Для начала напишу функцию, возвращающую True если число является палиндромом
Число-палиндром с обеих сторон (справа налево и слева направо) читается одинаково. Самое большое число-палиндром, полученное умножением двух двузначных чисел – 9009 = 91 × 99.
Найдите самый большой палиндром, полученный умножением двух трёхзначных чисел.
Заметка. Обычно перед решением каждой задачи я обращаюсь к математическим формулам для поиска оптимального алгоритма, но данную задачу я решил в лоб без особой математической базы. Работает медленно, но меньше 1-й минуты что удовлетворяет основному принципу решения.
Решение
def is_polindrom(num):
raw=str(num)
r_num=int(raw[::-1])
if num==r_num:
return True
else:
return False
Принцип работы прост - перевожу в строку и при помощи конструкции извлечения среза int(raw[::-1]) получаю реверс строки преобразованный обратно в int. Остается сверить новое число с исходным.
Вторая часть алгоритма тоже в лоб
pol=[]
for i in range(100,1000):
for j in range(100,1000):
if is_polindrom(i*j)==True:
pol.append(i*j)
print(max(pol))
В цикле перебираю все возможные варианты умножений числел от 100 до 999 и в список pol вывожу все возможные полиномы (их там, к стати 2470 чисел). Осталось только при помощи функции max вывести максимальное значение списка
Ответ на задачу
906609