Програма за палиндромно число в Java Използване на цикъл while & for
⚡ Умно обобщение
Програма за палиндромно число в Java определя дали дадена стойност се чете еднакво напред и назад, като обръща цифрите си. Тази статия представя алгоритъма, версия на цикъл while, версия на цикъл for, метод, базиран на низове, рекурсия, гранични случаи и анализ на сложността с проверен резултат.

Какво е числото на палиндрома?
A Палиндромно число е число, което остава същото, когато е обърнато. Например, 131. Когато цифрите му са обърнати, то си остава същото число. Числото-палиндром има отражателна симетрия по вертикалната ос. Същата идея важи и за дума, която има същия правопис, когато буквите ѝ са обърнати.
Примери за палиндромно число в Java
121, 393, 34043, 111, 555, 48084
Примери за палиндромни думи
LOL, MADAM
Всяка едноцифрена стойност от 0 до 9 е палиндром по дефиниция, защото обръщането на една цифра води до същата цифра.
Алгоритъм за палиндромно число
По-долу е показана логиката на алгоритъма за палиндромно число в Java:
- Извлечете въведеното число, което трябва да се провери дали е a Палиндроми.
- Копирайте числото във временна променлива и го обърнете.
- Сравнете обратното и оригиналното число.
- Ако са еднакви, числото е „палиндромно число“.
- В противен случай числото не е „палиндромно число“.
Самото обръщане е единствената част, която изисква внимание. Две аритметични операции вършат цялата работа, а таблицата по-долу tracги за стойност 171.
| Pass | a (останалото число) | последноDigit = a % 10 | сума = (сума * 10) + последноDigit | а = а / 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
По-долу е показан a 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 (log n) | O (1) | Не | Най-ясната демонстрация на обръщане на цифрите |
| За контур | O (log n) | O (1) | Не | Идентична логика, разделяне само в заглавката |
| Обратна връзка на StringBuilder | О (п) | О (п) | Да | Най-кратък код, разпределя нов низ |
| Рекурсия | О (п) | O(n) стек | Да | Полезно за интервюта, обсъждащи рекурсия |
Цифрата extracИзползваният тук модел на действие се появява отново в много упражнения. Продължете с Серия на Фибоначи в Java- Java програма за проверка на просто числои Bubble Алгоритъм за сортиране в JavaЗа самия синтаксис на цикъла, прегледайте за всеки цикъл в Java и по-широкото Java настойнически, и виж Java струни за метода, базиран на текст.
