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.

  • 🔁 Ydinmääritelmä: Palindromiluku pysyy muuttumattomana numeroiden vaihtamisen jälkeen, kuten lukujen 131, 393 ja 34043 tapauksessa.
  • Reversal-tekniikka: Modulusoperaattori extracViimeinen numero ja kokonaislukujako poistavat sen, yhden numeron kerrallaan.
  • 🧮 Keräilysääntö: Jokainen läpimenokerta kertoo juoksevan summan kymmenellä ennen kuin lisäämme juuri ilmestyneentracted-numero.
  • 🔂 Silmukan valinta: While-silmukka ja for-silmukka tuottavat identtiset tulokset, edellyttäen, että jakolasku esiintyy täsmälleen kerran iteraatiota kohden.
  • 🔤 Merkkijonomenetelmä: StringBuilder vertailee tekstiä suoraan käänteisesti ja toimii sekä sanoille että numeroille.
  • ⚠️ Edge-kotelot: Yksinumeroiset arvot ovat aina palindromeja, negatiiviset arvot eivät koskaan, ja lopussa olevat nollat ​​katkaisevat numeerisen vertailun.
  • ⏱️ Monimutkaisuusprofiili: Molemmat silmukkaversiot suoritetaan O(log n) ajassa, joka on verrannollinen numeroiden määrään, ja käyttävät O(1) ylimääräistä tilaa.

Palindrominumeroohjelma sisään Java

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öä.

  1. Negatiiviset luvut: Arvot, kuten -121, eivät ole koskaan palindromeja, koska miinusmerkillä ei ole vastinetta lopussa. if (inputNumber < 0) return false;.
  2. 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.
  3. 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.

UKK

Ei. Miinusmerkki näkyy vain alussa, joten käännettynä -121 on 121-, joka ei koskaan täsmää. Lisää alkusuoja, joka palauttaa arvon false, jos arvo on nollan alapuolella.

Kertominen siirtää jo kerättyjä numeroita yhden paikan vasemmalle, mikä vapauttaa yksiköiden paikan uusille numeroille.tracnumero. Tämä muodostaa numeron uudelleen käänteisessä järjestyksessä.

Käänteinen arvo voi ylittää kokonaislukumäärän maksimiarvon 2147483647 ja rivittää tuloksen negatiiviseksi. Määrittele akkumulaattori long-muodossa tai vertaa arvoja merkkijonoina.

Lue arvo Scannerilla ja nextInt-funktiolla ja vie se sitten samalle käänteislogiikalle. Kääri luku try-lohkoon, jotta ei-numeerinen syöttö ei kaada ohjelmaa.

Yleensä kyllä, kun koodia pyydetään tarkistamaan erikseen. He harvoin merkitsevät sitä pyytämättä, joten testaa aina tunnettua palindromia, kuten 121, sen sijaan, että luottaisit ohimenevään esimerkkiin.

Kysymys testaa silmukoiden hallintaa, kokonaislukuaritmetiikkaa ja reunatapausten päättelyä muutamalla rivillä. Se paljastaa myös, tarkistaako ehdokas tekoälyn luoman koodin ennen sen lähettämistä.

Tiivistä tämä viesti seuraavasti: