Program broja palindroma u Java Korištenje while & for petlje

⚡ Pametni sažetak

Program broja palindroma u Java određuje čita li se vrijednost identično naprijed i unatrag obrćući svoje znamenke. Ovaj članak predstavlja algoritam, verziju while petlje, verziju for petlje, metodu temeljenu na stringovima, rekurziju, rubne slučajeve i analizu složenosti s provjerenim izlazom.

  • 🔁 Osnovna definicija: Palindromski broj ostaje nepromijenjen nakon što se njegove znamenke zamijene, kao što je slučaj s brojevima 131, 393 i 34043.
  • ➗ Reversalna tehnika: Operator modula extracts posljednja znamenka i cjelobrojno dijeljenje je uklanja, jedna znamenka po prolazu.
  • 🧮 Pravilo akumulatora: Svaki prolaz množi tekući zbroj s deset prije dodavanja svježe extracted znamenka.
  • 🔂 Izbor petlje: Petlja while i petlja for daju identične rezultate, pod uvjetom da se dijeljenje pojavi točno jednom po iteraciji.
  • 🔤 Metoda niza: StringBuilder obrnuto uspoređuje tekst izravno i radi s riječima kao i s brojevima.
  • ⚠️ Rubna kućišta: Jednoznamenkaste vrijednosti su uvijek palindromi, negativne vrijednosti nikada nisu, a završne nule prekidaju numeričku usporedbu.
  • 🇧🇷 Profil složenosti: Obje verzije petlje izvršavaju se u vremenu O(log n) proporcionalnom broju znamenki i koriste O(1) dodatnog prostora.

Program broja palindroma u Java

Što je palindromski broj?

A Broj palindroma je broj koji ostaje isti kada se obrne. Na primjer, 131. Kada se njegove znamenke obrnu, ostaje isti broj. Palindromski broj ima refleksijsku simetriju na vertikalnoj osi. Ista ideja vrijedi i za riječ koja ima isti pravopis kada se slova obrnu.

Primjeri palindromskog broja u Java

121, 393, 34043, 111, 555, 48084

Primjeri palindromskih riječi

LOL, MADAM

Svaka jednoznamenkasta vrijednost od 0 do 9 je po definiciji palindrom, jer obrnuta zamjena jedne znamenke daje istu znamenku.

Algoritam broja palindroma

Ispod je logika algoritma za palindromski broj u Java:

  • Dohvatite ulazni broj za koji treba provjeriti da je a palindrom.
  • Kopirajte broj u privremenu varijablu i obrnite ga.
  • Usporedite obrnuti i izvorni broj.
  • Ako su isti, broj je „palindromski broj“.
  • Inače broj nije „palindromski broj“.

Samo preokretanje je jedini dio koji zahtijeva pažnju. Dvije aritmetičke operacije obavljaju sav posao, a tablica u nastavku tracdaje im vrijednost 171.

Proći a (preostali broj) zadnjiDigit = a % 10 zbroj = (zbroj * 10) + zadnjiDigit a = a / 10
1 171 1 1 17
2 17 7 17 1
3 1 1 171 0

Nakon posljednjeg prolaza, sum sadrži 171, što je jednako izvornom ulazu, pa se broj potvrđuje kao palindrom.

Kako provjeriti je li ulazni broj palindrom ili nije

Ispod je palindromski program u Java s WHILE petljom. Petlja se nastavlja dok ostaju znamenke, a print naredbe otkrivaju stanje svake varijable tijekom svakog prolaza.

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 Izlaz:

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 za provjeru palindroma pomoću for petlje

Ispod je a Java program za palindrom pomoću for petlje. Zaglavlje sadrži test izlaza i dijeljenje, tako da tijelo petlje ne smije ponovno dijeliti.

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 Izlaz:

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

⚠️ Upozorenje: Česta greška je držati a = a / 10; unutar tijela for petlje dok zaglavlje već sadrži a /= 10Broj se zatim dijeli dva puta po prolazu, polovica znamenki se preskače, a pravi palindrom poput 121 se netočno prijavljuje kao da nije palindrom.

Palindrom Program in Java Korištenje niza znakova Reverse

Pretvaranje vrijednosti u tekst omogućuje StringBuilderu da je obrne u jednom pozivu. Ista metoda funkcionira i za riječi koje numerički pristup ne može obraditi.

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 Izlaz:

true
true
false

Palindrom Program in Java Korištenje rekurzije

Rekurzija uspoređuje najudaljeniji par znakova, a zatim poziva samu sebe na smanjenom srednjem dijelu. Metoda se zaustavlja kada ostane manje od dva znaka.

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 Izlaz:

34043 is palindrome: true
12345 is palindrome: false

Rubni slučajevi i usporedba metoda

Tri ulaza prekidaju naivne implementacije, pa svaku verziju treba testirati u odnosu na njih prije upotrebe.

  1. Negativni brojevi: Vrijednosti poput -121 nikada nisu palindromi, jer znak minus nema ekvivalent na kraju. Zaštitite se s if (inputNumber < 0) return false;.
  2. Završne nule: Vrijednost 100 se obrće u 1, pa usporedba ispravno vraća false. Samo broj 0 prolazi među vrijednostima koje završavaju nulom.
  3. Prelijevanje cijelog broja: RevKorištenje velikog cijelog broja kao što je 1,999,999,999 može premašiti raspon cijelih brojeva. Deklarirajte sum kao long kada se ulaz može približiti granici.

Donja tablica uspoređuje četiri pristupa prikazana na ovoj stranici.

način Složenost vremena Složenost prostora Djela za riječi Bilješke
Dok petlja O (zapisnik n) O (1) Ne Najjasnija demonstracija inverzije znamenki
Za petlju O (zapisnik n) O (1) Ne Identična logika, podjela samo u zaglavlju
Obrnuto od StringBuildera O (n) O (n) Da Najkraći kod, dodjeljuje novi niz znakova
Rekurzije O (n) O(n) stog Da Korisno za razgovore o rekurziji u intervjuima

Znamenka extracUzorak korišten ovdje ponovno se pojavljuje u mnogim vježbama. Nastavite s Fibonaccijev niz u Java je Java program za provjeru prostih brojeva, A Bubble Algoritam sortiranja u JavaZa samu sintaksu petlje, pregledajte za svaku petlju u Java i šire Java udžbenik, i vidi Java žice za metodu temeljenu na tekstu.

Pitanja i odgovori

Ne. Znak minus pojavljuje se samo sprijeda, pa je -121 obrnuto 121- što se nikada ne podudara. Dodajte rani čuvar koji vraća false za bilo koju vrijednost ispod nule.

Množenjem se već prikupljene znamenke pomiču za jedno mjesto ulijevo, što oslobađa poziciju jedinica za novoizdvojenetraczadana znamenka. Ovo obnavlja broj obrnutim redoslijedom.

Obrnuta vrijednost može premašiti maksimalni cijeli broj od 2147483647 i rezultirati negativnim rezultatom. Deklarirajte akumulator kao long ili usporedite vrijednosti kao stringove.

Pročitajte vrijednost pomoću Scannera i nextInta, a zatim je proslijedite istoj logici preokretanja. Omotajte čitanje u blok try kako nenumerički unos ne bi srušio program.

Obično je odgovor da kada se od njih zatraži eksplicitan pregled koda. Rijetko ga označe bez poticaja, stoga uvijek testirajte poznati palindrom poput 121 umjesto da vjerujete prolaznom primjeru.

Pitanje u nekoliko redaka testira upravljanje petljom, cjelobrojnu aritmetiku i zaključivanje o rubnim slučajevima. Također otkriva provjerava li kandidat kod generiran umjetnom inteligencijom prije slanja.

Sažmite ovu objavu uz: