Palindromnummerprogram i Java Bruker while & for Loop

⚡ Smart oppsummering

Palindromnummerprogram i Java bestemmer om en verdi leses identisk forover og bakover ved å reversere sifrene. Denne artikkelen presenterer algoritmen, en while-løkkeversjon, en for-løkkeversjon, en strengbasert metode, rekursjon, kanttilfeller og kompleksitetsanalyse med verifisert utdata.

  • 🔁 Kjernedefinisjon: Et palindromtall forblir uendret etter at sifrene er reversert, som med 131, 393 og 34043.
  • Reversalteknikk: Moduloperatoren extracts det siste sifferet og heltallsdivisjon fjerner det, ett siffer per omgang.
  • 🧮 Akkumulatorregel: Hver omgang multipliserer den løpende summen med ti før den ferske ekstraksjonen legges til.tractett siffer.
  • 🔂 Loopvalg: En while-løkke og en for-løkke gir identiske resultater, forutsatt at divisjonen forekommer nøyaktig én gang per iterasjon.
  • 🔤 Strengmetode: StringBuilder reverse sammenligner tekst direkte og fungerer for både ord og tall.
  • ⚠️ Edge Cases: Ensifrede verdier er alltid palindromer, negative verdier er aldri det, og etterfølgende nuller bryter den numeriske sammenligningen.
  • Kompleksitetprofil: Begge løkkeversjonene kjører i O(log n) tid proporsjonal med sifferantallet og bruker O(1) ekstra plass.

Palindromnummerprogram i Java

Hva er palindromnummer?

A Palindrom nummer er et tall som forblir det samme tallet når det reverseres. For eksempel 131. Når sifrene reverseres, forblir det det samme tallet. Et palindromtall har refleksjonssymmetri på den vertikale aksen. Den samme ideen gjelder for et ord som har samme stavemåte når bokstavene reverseres.

Eksempler på palindromtall i Java

121, 393, 34043, 111, 555, 48084

Eksempler på palindromord

LOL, MADAM

Hvert enkelt siffer fra 0 til 9 er per definisjon et palindrom, fordi å reversere ett siffer produserer det samme sifferet.

Palindromtallalgoritme

Nedenfor er palindromnummeralgoritmens logikk i Java:

  • Hent inndatanummeret som må sjekkes for å være en palindrome.
  • Kopier tallet til en midlertidig variabel og reverser det.
  • Sammenlign det omvendte og originale tallet.
  • Hvis de er like, er tallet et «palindromtall».
  • Ellers er ikke tallet et «palindromtall».

Selve reverseringen er den eneste delen som trenger forsiktighet. To aritmetiske operasjoner gjør alt arbeidet, og tabellen nedenfor traces dem for verdien 171.

Pass et (gjenværende tall) sisteDigit = en % 10 sum = (sum * 10) + sisteDigit a = a / 10
1 171 1 1 17
2 17 7 17 1
3 1 1 171 0

Etter den siste gjennomgangen holder summen 171, som tilsvarer den opprinnelige inndataen, så tallet bekreftes som et palindrom.

Hvordan sjekke om inndatanummeret er palindrom eller ikke

Nedenfor er et palindromprogram i Java med en WHILE-løkke. Løkken fortsetter mens det gjenstår sifre, og print-setningene viser tilstanden til hver variabel under hver omgang.

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

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 for å sjekke palindrom ved å bruke for loop

Nedenfor er en Java program for palindrom ved bruk av en for-løkke. Overskriften inneholder exit-testen og divisjonen, så løkkekroppen må ikke dele seg igjen.

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

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

⚠️ Advarsel: En vanlig feil er å holde a = a / 10; inne i for-løkkens brødtekst mens overskriften allerede inneholder a /= 10Tallet deles deretter to ganger per omgang, halvparten av sifrene hoppes over, og et ekte palindrom som 121 rapporteres feilaktig som ikke et palindrom.

Palindromprogram i Java Bruk av streng Reverse

Ved å konvertere verdien til tekst kan StringBuilder reversere den i ett kall. Den samme metoden fungerer også for ord, som den numeriske tilnærmingen ikke kan håndtere.

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

true
true
false

Palindromprogram i Java Bruk av rekursjon

Rekursjon sammenligner det ytterste tegnparet og kaller deretter seg selv på den krympende midtre delen. Metoden stopper når færre enn to tegn gjenstår.

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

34043 is palindrome: true
12345 is palindrome: false

Kanttilfeller og metodesammenligning

Tre innganger ødelegger naive implementeringer, så hver versjon bør testes mot dem før bruk.

  1. Negative tall: Verdier som -121 er aldri palindromer, fordi minustegnet ikke har noen motpart på slutten. Beskytt deg med if (inputNumber < 0) return false;.
  2. Etterfølgende nuller: Verdien 100 reverseres til 1, så sammenligningen returnerer riktig usann. Bare tallet 0 i seg selv går mellom verdier som slutter på null.
  3. Heltallsoverløp: RevÅ slette et stort heltall, som for eksempel 1 999 999 999, kan overskride heltallsområdet. Deklarer sum som en long når inputen kan nærme seg grensen.

Tabellen nedenfor sammenligner de fire tilnærmingene som vises på denne siden.

Metode Tidskompleksitet Romkompleksitet Verk for ord Merknader
Mens sløyfe O (log n) O (1) Nei Tydeligste demonstrasjon av sifferreversering
For sløyfe O (log n) O (1) Nei Identisk logikk, kun deling i overskriften
StringBuilder revers O (n) O (n) Ja Korteste kode, tildeler en ny streng
Rekursjon O (n) O(n)-stabel Ja Nyttig for intervjudiskusjoner om rekursjon

Sifferet ekstracsjonsmønsteret som brukes her, dukker opp igjen i mange øvelser. Fortsett med Fibonacci-serien i Javaden Java program for å sjekke et primtall, og Bubble Sorter algoritmen inn JavaFor selve løkkesyntaksen, se gjennom for hver løkke i Java og bredere Java tutorial, og se Java strenger for den tekstbaserte metoden.

Spørsmål og svar

Nei. Minustegnet vises bare foran, så -121 reversert er 121- som aldri samsvarer. Legg til en tidlig vakt som returnerer usann for enhver verdi under null.

Multiplikasjon flytter sifrene som allerede er samlet ett sted til venstre, noe som frigjør enhetsposisjonen for den nylig ekskludertetractet siffer. Dette gjenoppbygger tallet i omvendt rekkefølge.

Den reverserte verdien kan overskride det maksimale int-tallet på 2147483647 og brytes til et negativt resultat. Deklarer akkumulatoren som en long, eller sammenlign verdiene som strenger i stedet.

Les verdien med Scanner og nextInt, og send den deretter til samme reverseringslogikk. Pakk inn lesingen i en try-blokk slik at ikke-numerisk input ikke krasjer programmet.

Vanligvis svarer de ja når de blir bedt om å gjennomgå koden eksplisitt. De flagger det sjelden uten at de blir bedt om det, så test alltid et kjent palindrom som 121 i stedet for å stole på et forbigående eksempel.

Spørsmålet tester løkkekontroll, heltallsaritmetikk og kanttilfelle-resonnement på noen få linjer. Det avslører også om en kandidat verifiserer AI-generert kode før den sendes inn.

Oppsummer dette innlegget med: