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: