Palindrominumeroohjelma sisään Java Käytetään while & for Loopia
⚡ Älykäs yhteenveto
Palindrominumeroohjelma sisään Java määrittää, luetaanko arvo identtisesti edestakaisin ja taaksepäin kääntämällä sen numerot päinvastaisiksi. Tässä artikkelissa esitellään algoritmi, while-silmukkaversio, for-silmukkaversio, merkkijonopohjainen menetelmä, rekursio, reunatapaukset ja monimutkaisuusanalyysi varmennetulla tulosteella.

Mikä on palindromiluku?
A Palindromi numero on luku, joka pysyy samana päinvastaisena. Esimerkiksi 131. Kun sen numerot käännetään, se pysyy samana lukuna. Palindromiluvulla on heijastussymmetria pystyakselilla. Sama ajatus pätee sanaan, jolla on sama kirjoitusasu, kun sen kirjaimet käännetään.
Esimerkkejä palindromiluvusta Java
121, 393, 34043, 111, 555, 48084
Esimerkkejä palindromisanoista
LOL, MADAM
Jokainen yksittäinen numero nollasta yhdeksään on määritelmän mukaan palindromi, koska yhden numeron kääntäminen toisin päin tuottaa saman numeron.
Palindrominumeroalgoritmi
Alla on palindromiluvun algoritmin logiikka Java:
- Hae syötenumero, joka on tarkistettava a palindromi.
- Kopioi luku väliaikaiseen muuttujaan ja käännä se.
- Vertaa käänteistä ja alkuperäistä numeroa.
- Jos ne ovat samat, luku on "palindromiluku".
- Muuten luku ei ole "palindromiluku".
Vain itse peruutus vaatii huomiota. Kaksi laskutoimitusta hoitaa kaiken työn, ja alla oleva taulukko tracantaa niille arvon 171.
| Siirtää | a (jäljellä oleva numero) | viimeDigit = a % 10 | summa = (summa * 10) + viimeinenDigit | a = a / 10 |
|---|---|---|---|---|
| 1 | 171 | 1 | 1 | 17 |
| 2 | 17 | 7 | 17 | 1 |
| 3 | 1 | 1 | 171 | 0 |
Viimeisen läpimenon jälkeen summa on 171, joka on yhtä suuri kuin alkuperäinen syöte, joten luku vahvistetaan palindromiksi.
Kuinka tarkistaa, onko syötenumero palindromi vai ei
Alla on palindromiohjelma Java WHILE-silmukalla. Silmukka jatkuu niin kauan kuin numeroita on jäljellä, ja tulostuslausekkeet näyttävät jokaisen muuttujan tilan jokaisen kierroksen aikana.
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 lähtö:
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
Ohjelma tarkistaa palindromi käyttämällä silmukkaa
Alla on a Java palindromiohjelma for-silmukan avulla. Otsikko sisältää lopetustestin ja jakolaskun, joten silmukan runko ei saa jakaa uudelleen.
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 lähtö:
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
⚠️ Varoitus: Yleinen virhe on pitää a = a / 10; for-silmukan rungon sisällä, kun taas otsikko sisältää jo a /= 10Luku jaetaan sitten kahdesti kerrallaan, puolet numeroista ohitetaan ja aito palindromi, kuten 121, raportoidaan virheellisesti ei-palindromina.
Palindromi-ohjelma sisään Java Merkkijonon käyttäminen Reverse
Arvon muuntaminen tekstiksi antaa StringBuilderille mahdollisuuden peruuttaa sen yhdellä kutsulla. Sama metodi toimii myös sanoille, joita numeerinen lähestymistapa ei pysty käsittelemään.
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 lähtö:
true true false
Palindromi-ohjelma sisään Java Rekursion käyttäminen
Rekursio vertaa uloimpia merkkipareja ja kutsuu sitten itseään kutistuvan keskiosan perusteella. Metodi pysähtyy, kun jäljellä on alle kaksi merkkiä.
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 lähtö:
34043 is palindrome: true 12345 is palindrome: false
Reunatapaukset ja menetelmien vertailu
Kolme syötettä rikkoo naiivit toteutukset, joten jokainen versio tulisi testata niitä vasten ennen käyttöä.
- Negatiiviset luvut: Arvot, kuten -121, eivät ole koskaan palindromeja, koska miinusmerkillä ei ole vastinetta lopussa.
if (inputNumber < 0) return false;. - Jäljen nollat: Arvo 100 kääntyy arvoon 1, joten vertailu palauttaa oikein arvon false. Vain luku 0 itse läpäisee nollaan päättyvien arvojen joukossa.
- Kokonaisluvun ylivuoto: RevSuuren kokonaisluvun, kuten 1 999 999 999, antaminen voi ylittää kokonaislukualueen. Määrittele summa long-arvoksi, kun syöte voi lähestyä rajaa.
Alla olevassa taulukossa vertaillaan tällä sivulla esitettyjä neljää lähestymistapaa.
| Menetelmä | Ajan monimutkaisuus | Avaruuden monimutkaisuus | Toimii sanoille | Huomautuksia |
|---|---|---|---|---|
| Vaikka silmukka | O (log n) | O (1) | Ei | Selkein osoitus numeron kääntämisestä |
| Silmukalle | O (log n) | O (1) | Ei | Identtinen logiikka, jako vain otsikossa |
| StringBuilder-käänteinen | O (n) | O (n) | Kyllä | Lyhin koodi, varaa uuden merkkijonon |
| Rekursio | O (n) | O(n)-pino | Kyllä | Hyödyllinen rekursion haastattelukeskusteluissa |
Numero extracTässä käytetty funktiokuvio toistuu monissa harjoituksissa. Jatka Fibonaccin sarja Java, The Java ohjelma alkuluvun tarkistamiseksi, ja Bubble Lajittele algoritmi JavaItse silmukan syntaksin osalta, katso jokaiselle silmukalle Java ja sitä leveämpi Java oppitunti, ja nähdä Java jouset tekstipohjaiselle menetelmälle.
