Palindrom szám program be Java A while & for Loop használata

⚡ Okos összefoglaló

Palindrom szám program be Java A függvény meghatározza, hogy egy érték azonosan olvasható-e előre és hátra, a számjegyek megfordításával. Ez a cikk bemutatja az algoritmust, egy while ciklus verziót, egy for ciklus verziót, egy karakterlánc alapú metódust, rekurziót, éleseteket és komplexitásanalízist ellenőrzött kimenettel.

  • 🔁 Alapvető definíció: A palindromszám változatlan marad a számjegyek felcserélése után, mint például a 131, 393 és 34043 esetében.
  • Reversal technika: Az ex modulus operátortracAz utolsó számjegy és az egész osztás eltávolítja, menetenként egy számjegyet.
  • 🧮 Gyűjtő szabály: Minden menet tízzel szorozza a futó összeget, mielőtt hozzáadná az újonnan ex-ttracted számjegy.
  • 🔂 Hurokválasztás: Egy while és egy for ciklus azonos eredményt ad, feltéve, hogy az osztás pontosan egyszer fordul elő iterációnként.
  • 🔤 Karakterlánc metódus: A StringBuilder fordított sorrendben közvetlenül hasonlítja össze a szöveget, és szavakra, valamint számokra is működik.
  • ⚠️ Edge tokok: Az egyjegyű értékek mindig palindromok, a negatív értékek soha, a záró nullák pedig megszakítják a numerikus összehasonlítást.
  • ⏱️ Komplexitási profil: Mindkét ciklusváltozat O(log n) idő alatt fut, arányos a számjegyek számával, és O(1) extra helyet használ.

Palindrom szám program be Java

Mi a palindromszám?

A Palindrom szám egy olyan szám, amelynek a helyesírása megfordul, például 131. Ha a számjegyeit felcseréljük, akkor ugyanaz a szám marad. A palindromszámok a függőleges tengelyen tükrözési szimmetriát mutatnak. Ugyanez az elképzelés vonatkozik egy olyan szóra is, amelynek a betűit felcserélve ugyanolyan a helyesírása.

Palindroma szám példái Java

121, 393, 34043, 111, 555, 48084

Palindroma szavak példái

LOL, MADAM

Definíció szerint minden 0 és 9 közötti számjegy palindrom, mivel egy számjegy megfordítása ugyanazt a számjegyet eredményezi.

Palindrom szám algoritmus

Az alábbiakban a palindromszám-algoritmus logikája látható. Java:

  • Kérje le a bemeneti számot, amelyet ellenőrizni kell, hogy a palindrom.
  • Másold be a számot egy ideiglenes változóba, és fordítsd meg.
  • Hasonlítsa össze a fordított és az eredeti számot.
  • Ha megegyeznek, akkor a szám egy „palindromaszám”.
  • Egyébként a szám nem „palindromaszám”.

Maga a megfordítás az egyetlen rész, amivel foglalkozni kell. Két aritmetikai művelet végzi el az összes munkát, és az alábbi táblázat traces őket a 171-es értékre.

Átmegy a (fennmaradó szám) utolsóDigit = a % 10 összeg = (összeg * 10) + utolsóDigit a = a / 10
1 171 1 1 17
2 17 7 17 1
3 1 1 171 0

Az utolsó menet után az sum értéke 171, ami megegyezik az eredetileg bemenetként megadott értékkel, így a szám palindromként megerősítést nyer.

Hogyan ellenőrizhető, hogy a bemeneti szám palindrom-e vagy sem

Az alábbiakban egy palindrom program látható Java egy WHILE ciklussal. A ciklus addig folytatódik, amíg a számjegyek megmaradnak, és a kiírási utasítások minden menet során minden változó állapotát megjelenítik.

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

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 a palindrom ellenőrzésére a for ciklus segítségével

Az alábbiakban a Java palindromra vonatkozó program for ciklus használatával. A fejléc tartalmazza a kilépési tesztet és az osztást, így a ciklus törzse nem oszthat újra.

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

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

⚠️ Figyelmeztetés: Gyakori hiba, hogy megtartjuk a = a / 10; a for ciklus törzsén belül, miközben a fejléc már tartalmazza a a /= 10A számot ezután menetenként kétszer osztják, a számjegyek felét kihagyják, és egy valódi palindromot, például a 121-et helytelenül, nem palindromként jelentenek.

Palindrom Program be Java Karakterlánc használata Reverse

Az érték szöveggé konvertálása lehetővé teszi a StringBuilder számára, hogy egyetlen hívásban megfordítsa azt. Ugyanez a metódus működik szavak esetén is, amelyeket a numerikus megközelítés nem tud kezelni.

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

true
true
false

Palindrom Program be Java Rekurzió használata

A rekurzió összehasonlítja a legkülső karakterpárt, majd a zsugorodó középső szakaszon meghívja magát. A metódus leáll, ha kevesebb, mint két karakter marad.

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

34043 is palindrome: true
12345 is palindrome: false

Edge Esetek és módszerek összehasonlítása

Három bemenet sérti a naiv implementációkat, ezért minden verziót használat előtt tesztelni kell velük szemben.

  1. Negatív számok: Az olyan értékek, mint a -121, soha nem palindromok, mivel a mínuszjelnek nincs megfelelője a végén. if (inputNumber < 0) return false;.
  2. Záró nullák: A 100-as érték 1-re változik, így az összehasonlítás helyesen hamis értéket ad vissza. Csak maga a 0 szám kerül át a nullára végződő értékek között.
  3. Egész szám túlcsordulás: RevEgy nagy egész szám, például az 1 999 999 999 meghaladhatja az egész tartományt. Az sum függvényt long típusként kell deklarálni, ha a bemenet megközelítheti a határértéket.

Az alábbi táblázat összehasonlítja az ezen az oldalon bemutatott négy megközelítést.

Módszer Idő komplexitás Tér komplexitás Működik szavakért Megjegyzések
Miközben hurok O (log n) O (1) Nem A számjegyváltás legtisztább bemutatása
Hurokhoz O (log n) O (1) Nem Azonos logika, osztás csak a fejlécben
StringBuilder fordított O (n) O (n) Igen Legrövidebb kód, új karakterláncot foglal le
Rekurzió O (n) O(n) verem Igen Hasznos a rekurzióval kapcsolatos interjúk megbeszéléseihez

Az ex számjegytracAz itt használt gyakorlási minta számos gyakorlatban újra megjelenik. Folytassa a Fibonacci-sorozat Java, a Java prímszám-ellenőrző program, És a Bubble Rendezési algoritmus JavaMagának a ciklusszintaxisnak a leírását tekintse át. minden egyes hurokhoz Java és szélesebb Java oktatói, és nézd Java húrok a szövegalapú metódushoz.

GYIK

Nem. A mínuszjel csak elöl jelenik meg, tehát a -121 megfordítva 121-, ami soha nem egyezik. Adjunk hozzá egy korai védőt, amely hamis értéket ad vissza nulla alatti értékek esetén.

A szorzás a már összegyűjtött számjegyeket egy hellyel balra tolja, ami felszabadítja az egységek helyét az újonnan kigyűjtött számjegyek számára.tracted számjegy. Ez fordított sorrendben építi fel a számot.

A fordított érték meghaladhatja a 2147483647-es int maximális értéket, és negatív eredményt ad. Az akkumulátort longként deklaráld, vagy az értékeket karakterláncként hasonlítsd össze.

Olvasd be az értéket a Scanner és a nextInt segítségével, majd add át ugyanarra a megfordító logikára. Csomagold be a beolvasott értéket egy try blokkba, hogy a nem numerikus bevitel ne okozza a program összeomlását.

Általában igen, ha explicit módon kérik a kód ellenőrzését. Ritkán jelzik ezt kéretlenül, ezért mindig tesztelj egy ismert palindromot, például a 121-et, ahelyett, hogy egy futó példára hagyatkoznál.

A kérdés néhány sorban teszteli a ciklusvezérlést, az egészszámos aritmetikát és a szélső esetekre vonatkozó érvelést. Azt is feltárja, hogy a jelölt ellenőrzi-e a mesterséges intelligencia által generált kódot a beküldés előtt.

Foglald össze ezt a bejegyzést a következőképpen: