Programma dei numeri palindromi in Java Utilizzo di while e for Loop
⚡ Riepilogo intelligente
Programma dei numeri palindromi in Java Questo articolo illustra l'algoritmo, una versione con ciclo while, una versione con ciclo for, un metodo basato su stringhe, la ricorsione, i casi limite e l'analisi della complessità con output verificato.

Cos'è un numero palindromo?
A Numero palindromo Un numero palindromo è un numero che rimane invariato anche se le sue cifre vengono invertite. Ad esempio, 131. Quando le sue cifre vengono invertite, il numero rimane lo stesso. Un numero palindromo presenta simmetria di riflessione rispetto all'asse verticale. Lo stesso concetto si applica a una parola che mantiene la stessa ortografia anche se le sue lettere vengono invertite.
Esempi di numeri palindromi in Java
121, 393, 34043, 111, 555, 48084
Esempi di parole palindrome
LOL, MADAM
Per definizione, ogni cifra compresa tra 0 e 9 è un numero palindromo, perché invertendo una cifra si ottiene sempre la stessa cifra.
Algoritmo dei numeri palindromi
Di seguito è riportata la logica dell'algoritmo dei numeri palindromi. Java:
- Recupera il numero di input che deve essere verificato per essere a Palindrome.
- Copia il numero in una variabile temporanea e invertilo.
- Confronta il numero invertito e quello originale.
- Se sono uguali, il numero è un “numero palindromo”.
- Altrimenti il numero non è un “numero palindromo”.
L'inversione in sé è l'unica parte che richiede attenzione. Due operazioni aritmetiche fanno tutto il lavoro, e la tabella sottostante tracli valuta per il valore 171.
| Passare | un (numero rimanente) | ultimoDigit = a % 10 | somma = (somma * 10) + ultimoDigit | a = a / 10 |
|---|---|---|---|---|
| 1 | 171 | 1 | 1 | 17 |
| 2 | 17 | 7 | 17 | 1 |
| 3 | 1 | 1 | 171 | 0 |
Dopo l'ultimo passaggio, la somma è 171, che corrisponde al valore di input originale, quindi il numero è confermato essere un palindromo.
Come verificare se il numero immesso è palindromo o meno
Di seguito è riportato un programma palindromo in Java con un ciclo WHILE. Il ciclo continua finché ci sono cifre e le istruzioni print mostrano lo stato di ogni variabile durante ogni iterazione.
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 Produzione:
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
Programma per verificare il palindromo utilizzando il ciclo for
Di seguito è riportato un Java Programma per trovare un palindromo usando un ciclo for. L'intestazione contiene il test di uscita e la divisione, quindi il corpo del ciclo non deve eseguire un'altra divisione.
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 Produzione:
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
⚠️ Attenzione: Un errore frequente è quello di mantenere a = a / 10; all'interno del corpo del ciclo for mentre l'intestazione contiene già a /= 10Il numero viene quindi diviso due volte per ogni passaggio, metà delle cifre vengono saltate e un vero palindromo come 121 viene erroneamente segnalato come non palindromo.
Programma palindromo in Java Utilizzo di Stringa Reverse
La conversione del valore in testo consente a StringBuilder di invertirlo con una sola chiamata. Lo stesso metodo funziona anche per le parole, cosa che l'approccio numerico non è in grado di gestire.
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 Produzione:
true true false
Programma palindromo in Java Utilizzo della ricorsione
La ricorsione confronta la coppia di caratteri più esterna e poi richiama se stessa sulla sezione centrale che si restringe. Il metodo si arresta quando rimangono meno di due caratteri.
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 Produzione:
34043 is palindrome: true 12345 is palindrome: false
Casi limite e confronto tra metodi
Tre input compromettono le implementazioni più semplici, quindi ogni versione dovrebbe essere testata rispetto a questi prima dell'uso.
- Numeri negativi: Valori come -121 non sono mai palindromi, perché il segno meno non ha un corrispettivo alla fine. Guardia con
if (inputNumber < 0) return false;. - Zeri finali: Il valore 100 si inverte in 1, quindi il confronto restituisce correttamente falso. Solo il numero 0 stesso passa tra i valori che terminano con zero.
- Overflow di interi: RevL'utilizzo di un intero molto grande come 1,999,999,999 può superare l'intervallo degli interi. Dichiarare `sum` come `long` quando l'input potrebbe avvicinarsi al limite.
La tabella seguente confronta i quattro approcci illustrati in questa pagina.
| Metodo | Complessità temporale | Complessità spaziale | Opere per le parole | Note |
|---|---|---|---|---|
| Mentre loop | O (log n) | O (1) | Non | La dimostrazione più chiara dell'inversione delle cifre |
| Per loop | O (log n) | O (1) | Non | Logica identica, divisione solo nell'intestazione |
| Inverso di StringBuilder | O (n) | O (n) | Si | Codice più breve, alloca una nuova stringa |
| Ricorsione | O (n) | Stack O(n) | Si | Utile per le discussioni sui colloqui di lavoro in merito alla ricorsione. |
La cifra extracLo schema di zione utilizzato qui riappare in molti esercizi. Continua con il serie di Fibonacci in Java, il Java programma per verificare un numero primo Bubble Algoritmo di ordinamento in Java. Per la sintassi del ciclo stesso, rivedere il per ogni ciclo in Java e il più ampio Java lezione, e vedi Java stringhe per il metodo basato sul testo.
