Program liczb palindromowych w Java Używanie pętli while i for
⚡ Inteligentne podsumowanie
Program liczb palindromowych w Java Określa, czy wartość jest identyczna w obu kierunkach, poprzez odwrócenie cyfr. W tym artykule przedstawiono algorytm, wersję pętli while, wersję pętli for, metodę opartą na ciągach znaków, rekurencję, przypadki brzegowe oraz analizę złożoności z weryfikowanym wynikiem.
Co to jest liczba palindromowa?
A Liczba palindromowa Liczba palindromiczna to liczba, która pozostaje taka sama po odwróceniu. Na przykład 131. Po odwróceniu cyfr pozostaje taka sama. Liczba palindromiczna ma symetrię odbicia wzdłuż osi pionowej. Ta sama zasada dotyczy słowa, które ma tę samą pisownię po odwróceniu liter.
Przykłady liczb palindromowych w Java
121, 393, 34043, 111, 555, 48084
Przykłady słów palindromowych
LOL, MADAM
Każda pojedyncza cyfra od 0 do 9 jest z definicji palindromem, ponieważ odwrócenie jednej cyfry daje tę samą cyfrę.
Algorytm liczb palindromowych
Poniżej przedstawiono logikę algorytmu liczb palindromowych w Java:
- Pobierz numer wejściowy, który należy sprawdzić pod kątem bycia a Palindrom.
- Skopiuj liczbę do zmiennej tymczasowej i odwróć ją.
- Porównaj liczbę odwróconą i oryginalną.
- Jeżeli są takie same, liczba ta jest „liczbą palindromową”.
- W przeciwnym wypadku liczba ta nie jest „liczbą palindromową”.
Samo odwrócenie to jedyna część, która wymaga uwagi. Dwie operacje arytmetyczne wykonują całą pracę, a poniższa tabela… traces je za wartość 171.
| Przechodzić | a (pozostała liczba) | trwaćDigit = a % 10 | suma = (suma * 10) + ostatniDigit | a = a / 10 |
|---|---|---|---|---|
| 1 | 171 | 1 | 1 | 17 |
| 2 | 17 | 7 | 17 | 1 |
| 3 | 1 | 1 | 171 | 0 |
Po ostatnim przebiegu suma wynosi 171, co jest równe oryginalnemu wejściu, więc liczba jest potwierdzona jako palindrom.
Jak sprawdzić, czy liczba wejściowa jest palindromem, czy nie
Poniżej znajduje się program palindromowy w Java z pętlą WHILE. Pętla jest kontynuowana, dopóki pozostają cyfry, a polecenia print ujawniają stan każdej zmiennej podczas każdego przebiegu.
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 Wyjście:
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
Program sprawdzający palindrom za pomocą pętli for
Poniżej znajduje Java Program dla palindromu z pętlą for. Nagłówek zawiera test wyjścia i dzielenie, więc ciało pętli nie może dzielić się ponownie.
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 Wyjście:
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
⚠️ Ostrzeżenie: Częstym błędem jest trzymanie a = a / 10; wewnątrz ciała pętli for, podczas gdy nagłówek już zawiera a /= 10Następnie liczba jest dzielona dwukrotnie na raz, połowa cyfr jest pomijana, a prawdziwy palindrom, taki jak 121, jest błędnie zgłaszany jako niebędący palindromem.
Program palindromowy w Java Używanie ciągu Reverse
Konwersja wartości na tekst pozwala StringBuilderowi na odwrócenie jej w jednym wywołaniu. Ta sama metoda działa również w przypadku słów, których nie obsługuje podejście numeryczne.
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 Wyjście:
true true false
Program palindromowy w Java Korzystanie z rekurencji
Rekurencja porównuje skrajną parę znaków, a następnie wywołuje samą siebie w kurczącej się środkowej części. Metoda kończy działanie, gdy pozostają mniej niż dwa znaki.
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 Wyjście:
34043 is palindrome: true 12345 is palindrome: false
Porównanie przypadków brzegowych i metod
Trzy dane wejściowe zakłócają proste implementacje, dlatego przed użyciem należy przetestować każdą wersję pod kątem tych danych.
- Liczby ujemne: Wartości takie jak -121 nigdy nie są palindromami, ponieważ znak minus nie ma odpowiednika na końcu.
if (inputNumber < 0) return false;. - Zera końcowe: Wartość 100 jest odwracana do 1, więc porównanie prawidłowo zwraca fałsz. Tylko sama liczba 0 przechodzi między wartościami kończącymi się zerem.
- Przepełnienie całkowite: RevWprowadzenie dużej liczby całkowitej, takiej jak 1 999 999 999, może przekroczyć zakres liczb całkowitych. Zadeklaruj wartość „sum” jako „long”, gdy wartość wejściowa może zbliżać się do limitu.
Poniższa tabela porównuje cztery podejścia pokazane na tej stronie.
| Metoda wykonania | Złożoność czasowa | Złożoność przestrzeni | Dzieła za słowa | Komentarz |
|---|---|---|---|---|
| Podczas pętli | O (log n) | O (1) | Nie | Najbardziej wyraźny dowód odwrócenia cyfr |
| Dla pętli | O (log n) | O (1) | Nie | Identyczna logika, podział tylko w nagłówku |
| StringBuilder odwrócony | Na) | Na) | Tak | Najkrótszy kod, przydziela nowy ciąg |
| Rekurencja | Na) | Stos O(n) | Tak | Przydatne do dyskusji na temat rekurencji podczas rozmów kwalifikacyjnych |
Cyfra extracWzorzec encji użyty tutaj pojawia się ponownie w wielu ćwiczeniach. Kontynuuj Ciąg Fibonacciego w JavaThe Java program do sprawdzania liczby pierwszeji Bubble Algorytm sortowania w JavaAby zapoznać się ze składnią pętli, przejrzyj dla każdej pętli w Java i szerszy Java Tutorial, i zobaczyć Java smyczki dla metody opartej na tekście.

