Найти тему
Buzzkiller

Проект Эйлера. Задача №4. (на Java)

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

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

Для хранение чисел я решил использовать массив. Выбрал динамический массив ArrayList, так как изначально неизвестно количество чисел, которое придется хранить.(Узнать возможный максимум можно было бы перемножив 999*999, но мне захотелось через динамический массив).

С помощью цикла for получил множество произведений трёхзначных чисел:

Затем я поместил это множество в массив:

-2

Преобразование в строку было сделано для того, чтобы можно было взять отдельно взятые цифры для заполнения массива. Сделал я это с помощью CharAt(). Теперь в массиве не само число, а составляющие его цифры.

После этого я заполнил второй массив данными из первого, записав его в обратном порядке:

-3

Для проверки того, является ли число палиндромом, я использовал equals, присвоив его значение к булиновой переменной compareResult:

-4

Далее с помощью if я сохранял максимальное значение произведения-палиндром:

Массивы очищаются для того, чтобы каждый раз в них было только одно значение произведения
Массивы очищаются для того, чтобы каждый раз в них было только одно значение произведения

Весь код выглядит так:

import java.util.*;
public class Solution {
public static void main(String[] args) {
boolean compareResult;
int product = 0;
int index = 0;
int max = 0;
int length;
String number;
ArrayList<Integer> StackNumber = new ArrayList<Integer>();
ArrayList<Integer> CopyStackNumber = new ArrayList<Integer>();
for (int i = 100; i <= 999; i++) {
for (int j = 100; j <= 999; j++) {
product = j * i;
length = String.
valueOf(product).length();
number = Integer.
toString(product);
for (int k = 0; k < length; k++) {
index = number.charAt(k);
StackNumber.add(index);
}
for (int q = StackNumber.size() - 1; q >= 0; q--) {
CopyStackNumber.add(StackNumber.get(q));
}
compareResult = StackNumber.equals(CopyStackNumber);
StackNumber.clear();
CopyStackNumber.clear();
if (compareResult && product > max) {
max = product;
}
}
}
System.
out.println("Max =" + max);
}
}

Ответ: 906609.