Palindrom číselný program v Java Použití while a pro smyčku

⚡ Chytré shrnutí

Palindrom číselný program v Java Určuje, zda se hodnota čte identicky vpřed i vzad, a to obrácením jejích číslic. Tento článek představuje algoritmus, verzi smyčky while, verzi smyčky for, metodu založenou na řetězcích, rekurzi, okrajové případy a analýzu složitosti s ověřeným výstupem.

  • 🔁 Základní definice: Palindromové číslo zůstává nezměněno i po záměně číslic, jako například u čísel 131, 393 a 34043.
  • Reversální technika: Operátor modulu extracts poslední číslice a celočíselné dělení ji odstraní, jedna číslice na průchod.
  • 🧮 Pravidlo akumulace: Každý průchod vynásobí průběžný součet deseti, než se přidá čerstvě extracted číslice.
  • 🔂 Volba smyčky: Smyčka while a smyčka for produkují identické výsledky za předpokladu, že dělení se objeví právě jednou za iteraci.
  • 🔤 Metoda řetězce: StringBuilder porovnává text přímo a funguje jak se slovy, tak s čísly.
  • ⚠️ Okrajová pouzdra: Jednociferné hodnoty jsou vždy palindromy, záporné hodnoty nikdy a koncové nuly přerušují číselné porovnání.
  • ⏱️ Profil složitosti: Obě verze smyčky běží v čase O(log n) úměrném počtu číslic a spotřebují O(1) volného prostoru.

Palindrom číselný program v Java

Co je to palindromové číslo?

A Palindromové číslo je číslo, které zůstává stejné, i když je obráceno. Například 131. Když jsou jeho číslice obráceny, zůstává stejné číslo. Palindromové číslo má zrcadlovou symetrii na svislé ose. Stejná myšlenka platí pro slovo, které má stejný pravopis, i když jsou jeho písmena obrácena.

Příklady palindromového čísla v Java

121, 393, 34043, 111, 555, 48084

Příklady palindromových slov

LOL, MADAM

Každá jednočíslicová hodnota od 0 do 9 je z definice palindrom, protože obrácením jedné číslice získáme stejnou číslici.

Algoritmus čísla palindromu

Níže je uvedena logika algoritmu pro palindromové číslo. Java:

  • Získejte vstupní číslo, u kterého je třeba zkontrolovat, zda je a Palindrom.
  • Zkopírujte číslo do dočasné proměnné a obraťte jeho hodnotu.
  • Porovnejte obrácené a původní číslo.
  • Pokud jsou stejná, jedná se o „palindromové číslo“.
  • Jinak se nejedná o „palindromové číslo“.

Samotné obrácení je jediná část, která vyžaduje péči. Veškerou práci provedou dvě aritmetické operace a tabulka níže tracnastaví je na hodnotu 171.

Přejít a (zbývající číslo) posledníDigit = a % 10 součet = (součet * 10) + posledníDigit a = a / 10
1 171 1 1 17
2 17 7 17 1
3 1 1 171 0

Po posledním průchodu má sum hodnotu 171, což se rovná původnímu vstupu, takže číslo je potvrzeno jako palindrom.

Jak zkontrolovat, zda je vstupní číslo Palindrom nebo ne

Níže je uveden palindromový program v Java se smyčkou WHILE. Smyčka pokračuje, dokud zůstanou číslice, a příkazy print během každého průchodu zobrazují stav každé proměnné.

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 Výstup:

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 pro kontrolu palindromu pomocí smyčky for

Níže je Java program pro palindrom pomocí cyklu for. Hlavička obsahuje výstupní test a dělení, takže tělo cyklu se nesmí znovu dělit.

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 Výstup:

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

Warning️ Varování: Častou chybou je ponechávat a = a / 10; uvnitř těla smyčky for, zatímco hlavička již obsahuje a /= 10Číslo je pak v každém průchodu dvakrát děleno, polovina číslic je přeskočena a skutečný palindrom, jako například 121, je nesprávně hlášen jako nepalindrom.

Program Palindrom v Java Použití řetězce Reverse

Převod hodnoty na text umožňuje StringBuilderu obrátit ji v jednom volání. Stejná metoda funguje i pro slova, která numerický přístup nedokáže zpracovat.

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 Výstup:

true
true
false

Program Palindrom v Java Použití rekurze

Rekurze porovnává nejvzdálenější dvojici znaků a poté se volá na zmenšující se střední části. Metoda se zastaví, když zbývají méně než dva znaky.

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 Výstup:

34043 is palindrome: true
12345 is palindrome: false

Okrajové případy a srovnání metod

Tři vstupy narušují naivní implementace, takže každá verze by měla být před použitím otestována proti nim.

  1. Záporná čísla: Hodnoty jako -121 nikdy nejsou palindromy, protože znaménko mínus nemá na konci protějšek. Chraňte se if (inputNumber < 0) return false;.
  2. Koncové nuly: Hodnota 100 se obrátí na 1, takže porovnání správně vrátí hodnotu false. Mezi hodnotami končícími nulou prochází pouze číslo 0.
  3. Přetečení celého čísla: RevPoužití velkého celého čísla, například 1 999 999 999, může překročit rozsah celých čísel. Deklarujte sum jako long, pokud se vstupní hodnota může blížit limitu.

Níže uvedená tabulka porovnává čtyři přístupy uvedené na této stránce.

Metoda Časová složitost Složitost vesmíru Díla pro slova Poznámky
Zatímco smyčka O (log n) O (1) Ne Nejjasnější demonstrace obrácení číslic
Pro smyčku O (log n) O (1) Ne Identická logika, rozdělení pouze v záhlaví
StringBuilder reverzní O (n) O (n) Ano Nejkratší kód, alokuje nový řetězec
Rekurze O (n) O(n) zásobník Ano Užitečné pro rozhovory o rekurzi

Číslice extracZde použitý vzorec se v mnoha cvičeních znovu objevuje. Pokračujte s Fibonacciho řada v Javase Java program pro kontrolu prvočíslaA Bubble Algoritmus řazení v Java. Samotnou syntaxi smyčky si projděte pro každou smyčku v Java a širší Java konzultace, a vidí Java řetězce pro textovou metodu.

Nejčastější dotazy

Ne. Znaménko mínus se objevuje pouze vpředu, takže -121 obráceně je 121-, což se nikdy neshoduje. Přidejte časný ochranný kód, který vrací false pro jakoukoli hodnotu pod nulou.

Násobením se již shromážděné číslice posunou o jedno místo doleva, čímž se uvolní pozice jednotek pro nově získané číslice.tracčíslice. Tím se číslo znovu sestaví v obráceném pořadí.

Obrácená hodnota může překročit maximální integer 2147483647 a zalomit se na záporný výsledek. Deklarujte akumulátor jako long nebo porovnejte hodnoty jako řetězce.

Hodnotu přečtěte pomocí Scanneru a nextInt a poté ji předejte stejné logice pro obrácení. Přečtenou hodnotu zabalte do bloku try, aby nečíselný vstup nezpůsobil pád programu.

Obvykle ano, když jsou požádáni o explicitní kontrolu kódu. Zřídka to označí bez vyzvání, takže vždy otestujte známý palindrom, například 121, než abyste důvěřovali nějakému příkladu.

Otázka v několika řádcích testuje řízení smyček, celočíselnou aritmetiku a uvažování o okrajových případech. Také odhaluje, zda kandidát před odesláním kódu vygenerovaného umělou inteligencí ověří jeho použití.

Shrňte tento příspěvek takto: