Програма паліндром чисел в Java Використання циклу while & for
⚡ Розумний підсумок
Програма паліндром чисел в Java визначає, чи значення читається однаково вперед та назад, шляхом інвертування його цифр. У цій статті представлено алгоритм, версію циклу while, версію циклу for, метод на основі рядків, рекурсію, граничні випадки та аналіз складності з перевіреним виходом.
Що таке число паліндрому?
A Паліндромне число — це число, яке залишається тим самим, коли його перевертають. Наприклад, 131. Коли його цифри перевертають, воно залишається тим самим числом. Число-паліндром має відбивну симетрію по вертикальній осі. Та сама ідея стосується слова, яке має однакове написання, коли його літери перевертають.
Приклади паліндромного числа в Java
121, 393, 34043, 111, 555, 48084
Приклади слів-паліндромів
LOL, MADAM
Кожне окреме значення від 0 до 9 є паліндромом за визначенням, оскільки перестановка однієї цифри в інше русло дає ту саму цифру.
Алгоритм паліндромного числа
Нижче наведено логіку алгоритму паліндромного числа в Java:
- Отримайте введене число, яке потрібно перевірити на наявність a Паліндром.
- Скопіюйте число у тимчасову змінну та зробіть зворотне обчислення.
- Порівняйте зворотне та вихідне число.
- Якщо вони однакові, то число є «паліндромним числом».
- В іншому випадку число не є «паліндромним числом».
Сам процес розвороту — це єдина частина, яка потребує уваги. Всю роботу виконують дві арифметичні операції, а таблиця нижче tracоцінює їх за значення 171.
| Проходити | a (число, що залишилося) | останнійDigit = a % 10 | сума = (сума * 10) + останнєDigit | a = a / 10 |
|---|---|---|---|---|
| 1 | 171 | 1 | 1 | 17 |
| 2 | 17 | 7 | 17 | 1 |
| 3 | 1 | 1 | 171 | 0 |
Після останнього проходу, sum містить 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, може перевищувати діапазон цілих чисел. Оголошуйте суму як long, коли вхідне значення може наближатися до граничного значення.
У таблиці нижче порівнюються чотири підходи, показані на цій сторінці.
| Метод | Складність часу | Складність простору | Твори для слів | примітки |
|---|---|---|---|---|
| Поки петля | O (журнал n) | O (1) | Немає | Найчіткіша демонстрація інвертування цифр |
| Для петлі | O (журнал n) | O (1) | Немає | Ідентична логіка, поділ лише в заголовку |
| Зворотний StringBuilder | О (п) | О (п) | Так | Найкоротший код, виділяє новий рядок |
| Рекурсія | О (п) | O(n) стек | Так | Корисно для обговорення рекурсії на співбесіді |
Цифра extracВикористана тут схема повторюється в багатьох вправах. Продовжуйте Ряд Фібоначчі в Java, Java програма для перевірки простого числа, А Bubble Алгоритм сортування в JavaЩодо самого синтаксису циклу, перегляньте для кожного циклу в Java і тим ширше Java підручник, і див Java струни для текстового методу.

