Найти тему
Забугорные записки

Проект Эйлера. Задача 4

Наибольшее произведение-палиндром

Число-палиндром с обеих сторон (справа налево и слева направо) читается одинаково. Самое большое число-палиндром, полученное умножением двух двузначных чисел – 9009 = 91 × 99.

Найдите самый большой палиндром, полученный умножением двух трехзначных чисел.

Сначала продумаем, как проверить, является ли число палиндромом. Можно рассматривать его именно как число, раскладывать на цифры (путём деления на 10 в разных степенях) и сравнивать эти цифры.

Но мне нравится другой вариант. Python позволяет превратить число в строку при помощи функции str(), а строки неприхотливее в обработке. Чтобы развернуть строку, можно использовать reversed(), но я, как и всегда, выберу вариант покривее да попроще: перебор символов слева направо при помощи [::-1].

Итоговый вид проверки на палиндромность дополнительно запихнём в отдельную функцию:

def is_palindrome(number):
if str(number)[::-1] == str(number):
return True
return False # Здесь не нужно указывать ветвление
# Python прекратит выполнять функцию
# после первого return

Теперь соберём тело. Оно будет перебирать произведения всех трёхзначных чисел и, если они палиндромы, запоминать наибольшее.

answer = 0
for i in range(100, 1000):
for y in range(i, 1000): # Старт перебора второго числа не от 100, а от первого
# Позволит ускорить работу кода, не потеряв вариантов выборки
multiplication = i*y
if is_palindrome(multiplication):
answer = max(multiplication, answer)
print(answer)

# Output: 906609

# Это произведение 913 и 993

Наука
7 млн интересуются