Программа чисел палиндромов в Java Использование цикла while и for
⚡ Умное резюме
Программа чисел палиндромов в Java Определяет, считывается ли значение одинаково как вперед, так и назад, путем перестановки его цифр. В данной статье представлен алгоритм, версия с циклом while, версия с циклом for, строковый метод, рекурсия, граничные случаи и анализ сложности с проверенными результатами.

Что такое число-палиндром?
A Число палиндрома Палиндром — это число, которое остаётся тем же самым числом при перевёртывании. Например, 131. При перевёртывании цифр оно остаётся тем же числом. Палиндром обладает зеркальной симметрией относительно вертикальной оси. Тот же принцип применим и к слову, которое имеет то же написание при перевёртывании букв.
Примеры чисел-палиндромов в Java
121, 393, 34043, 111, 555, 48084
Примеры слов-палиндромов
LOL, MADAM
По определению, каждая цифра от 0 до 9 является палиндромом, поскольку при перестановке одной цифры получается та же самая цифра.
Алгоритм числа палиндромов
Ниже представлена логика алгоритма вычисления палиндромных чисел. Java:
- Получите входной номер, который необходимо проверить на предмет Палиндром.
- Скопируйте число во временную переменную и переверните его.
- Сравните перевернутое и исходное число.
- Если они одинаковые, то это «число-палиндром».
- В противном случае это число не является «палиндромом».
Только сам процесс обратного преобразования требует внимания. Две арифметические операции выполняют всю работу, а таблица ниже... tracоценивает их по значению 171.
| Проходить | а (оставшееся число) | последнийDigiт = а % 10 | сумма = (сумма * 10) + последнийDigit | а = а / 10 |
|---|---|---|---|---|
| 1 | 171 | 1 | 1 | 17 |
| 2 | 17 | 7 | 17 | 1 |
| 3 | 1 | 1 | 171 | 0 |
После последнего прохода сумма оказывается равной 171, что соответствует исходному значению, поэтому число подтверждается как палиндром.
Как проверить, является ли входное число палиндромом или нет
Ниже представлена программа для изучения палиндромов. Java с циклом WHILE. Цикл продолжается до тех пор, пока остаются цифры, а операторы print отображают состояние каждой переменной на каждом проходе.
package com.guru99; public class PalindromeNum { public static void main(String[] args) { int lastDigit, sum = 0, a; int inputNumber = 171; //It is the number to be checked for palindrome a = inputNumber; // Code to reverse a number while(a > 0) { System.out.println("Input Number " + a); lastDigit = a % 10; //getting remainder System.out.println("Last Digit " + lastDigit); System.out.println("Digit " + lastDigit + " was added to sum " + (sum * 10)); sum = (sum * 10) + lastDigit; a = a / 10; } // if the given number equals sum then the number is a palindrome, otherwise not if(sum == inputNumber) System.out.println("Number is palindrome "); else System.out.println("Number is not palindrome"); } }
Code Выход:
Input Number 171 Last Digit 1 Digit 1 was added to sum 0 Input Number 17 Last Digit 7 Digit 7 was added to sum 10 Input Number 1 Last Digit 1 Digit 1 was added to sum 170 Number is palindrome
Программа для проверки палиндрома с использованием цикла for
Ниже приведен Java Программа для поиска палиндрома с использованием цикла for. Заголовочный файл содержит проверку завершения и деление, поэтому тело цикла не должно приводить к повторному делению.
package com.guru99; public class PalindromeNumForLoop { public static void main(String[] args) { int lastDigit, sum = 0, a; int inputNumber = 185; //It is the number to be checked for palindrome a = inputNumber; // Code to reverse a number for( ; a != 0; a /= 10 ) { System.out.println("Input Number " + a); lastDigit = a % 10; //getting remainder System.out.println("Last Digit " + lastDigit); System.out.println("Digit " + lastDigit + " was added to sum " + (sum * 10)); sum = (sum * 10) + lastDigit; } // if the given number equals sum then the number is a palindrome, otherwise not if(sum == inputNumber) System.out.println("Number is palindrome "); else System.out.println("Number is not palindrome"); } }
Code Выход:
Input Number 185 Last Digit 5 Digit 5 was added to sum 0 Input Number 18 Last Digit 8 Digit 8 was added to sum 50 Input Number 1 Last Digit 1 Digit 1 was added to sum 580 Number is not palindrome
⚠️ Предупреждение: Распространенная ошибка — это продолжать a = a / 10; внутри тела цикла for, пока заголовок уже содержит a /= 10Затем число делится дважды за один проход, половина цифр пропускается, и настоящий палиндром, такой как 121, ошибочно сообщается как не являющийся палиндромом.
Программа Палиндром в Java Использование строки Reverse
Преобразование значения в текст позволяет StringBuilder выполнить его обратное преобразование за один вызов. Этот же метод работает и для слов, с которыми числовой подход не справляется.
package com.guru99; public class PalindromeString { public static boolean isPalindrome(String text) { // ignore case so MADAM and madam behave identically String clean = text.toLowerCase(); String reversed = new StringBuilder(clean).reverse().toString(); return clean.equals(reversed); } public static void main(String[] args) { System.out.println(isPalindrome("121")); System.out.println(isPalindrome("MADAM")); System.out.println(isPalindrome("Java")); } }
Code Выход:
true true false
Программа Палиндром в Java Использование рекурсии
Рекурсия сравнивает крайнюю пару символов, а затем вызывает саму себя в уменьшающейся средней части. Метод останавливается, когда остается менее двух символов.
package com.guru99; public class PalindromeRecursion { public static boolean isPalindrome(String text, int left, int right) { // base case: pointers met or crossed if (left >= right) { return true; } if (text.charAt(left) != text.charAt(right)) { return false; } return isPalindrome(text, left + 1, right - 1); } public static void main(String[] args) { String value = "34043"; System.out.println(value + " is palindrome: " + isPalindrome(value, 0, value.length() - 1)); String other = "12345"; System.out.println(other + " is palindrome: " + isPalindrome(other, 0, other.length() - 1)); } }
Code Выход:
34043 is palindrome: true 12345 is palindrome: false
Крайние случаи и сравнение методов
Три входных параметра нарушают работу простых реализаций, поэтому каждую версию следует тестировать на их совместимость перед использованием.
- Отрицательные числа: Значения, такие как -121, никогда не являются палиндромами, поскольку знак минус не имеет аналога в конце. Защитите с помощью
if (inputNumber < 0) return false;. - Нули в конце: Значение 100 преобразуется в 1, поэтому сравнение корректно возвращает false. Только само число 0 проходит через значения, оканчивающиеся на ноль.
- Переполнение целочисленного типа: RevВвод большого целого числа, например 1 999 999 999, может выйти за пределы допустимого диапазона целых чисел. Объявляйте функцию sum как long, если входные данные могут приближаться к пределу.
В таблице ниже сравниваются четыре подхода, представленные на этой странице.
| Способ доставки | Сложность времени | Космическая сложность | Произведения ради слов | Заметки |
|---|---|---|---|---|
| Пока цикл | O (журнал n) | O (1) | Нет | Наиболее наглядная демонстрация обратного порядка цифр |
| Для цикла | O (журнал n) | O (1) | Нет | Идентичная логика, разделение только в заголовке. |
| StringBuilder reverse | О (п) | О (п) | Да | Кратчайший код, выделяет новую строку. |
| Рекурсия | О (п) | стек O(n) | Да | Полезно для обсуждения рекурсии на собеседованиях. |
Цифра extracИспользуемая здесь схема повторится во многих упражнениях. Продолжайте с... Последовательность Фибоначчи в Java, Java программа для проверки простого числа, и Bubble Алгоритм сортировки в JavaЧто касается синтаксиса цикла, ознакомьтесь с информацией по ссылке: для каждого цикла в Java и более широких Java учебник, и посмотреть Java струны для текстового метода.
