Програма за палиндромно число в Java Използване на цикъл while & for

⚡ Умно обобщение

Програма за палиндромно число в Java определя дали дадена стойност се чете еднакво напред и назад, като обръща цифрите си. Тази статия представя алгоритъма, версия на цикъл while, версия на цикъл for, метод, базиран на низове, рекурсия, гранични случаи и анализ на сложността с проверен резултат.

  • 🔁 Основна дефиниция: Палиндромното число остава непроменено, след като цифрите му са обърнати, както е при 131, 393 и 34043.
  • ➗ RevТехника на персийската терапия: Операторът на модул extracпоследната цифра се премахва и целочисленото деление я премахва, по една цифра на проход.
  • 🧮 Правило за акумулатор: Всеки проход умножава текущата сума по десет, преди да добави прясно извлеченияtracТед цифра.
  • 🔂 Избор на цикъл: Цикълът while и цикълът for дават идентични резултати, при условие че делението се появява точно веднъж на итерация.
  • 🔤 Метод на низовете: StringBuilder сравнява текста директно и работи както с думи, така и с числа.
  • ⚠️ Edge калъфи: Едноцифрените стойности винаги са палиндроми, отрицателните стойности никога не са, а нулите след тях прекъсват числовото сравнение.
  • ️ Профил на сложност: И двата варианта на цикъла се изпълняват за време O(log n), пропорционално на броя цифри, и използват O(1) допълнително пространство.

Програма за палиндромно число в Java

Какво е числото на палиндрома?

A Палиндромно число е число, което остава същото, когато е обърнато. Например, 131. Когато цифрите му са обърнати, то си остава същото число. Числото-палиндром има отражателна симетрия по вертикалната ос. Същата идея важи и за дума, която има същия правопис, когато буквите ѝ са обърнати.

Примери за палиндромно число в Java

121, 393, 34043, 111, 555, 48084

Примери за палиндромни думи

LOL, MADAM

Всяка едноцифрена стойност от 0 до 9 е палиндром по дефиниция, защото обръщането на една цифра води до същата цифра.

Алгоритъм за палиндромно число

По-долу е показана логиката на алгоритъма за палиндромно число в Java:

  • Извлечете въведеното число, което трябва да се провери дали е a Палиндроми.
  • Копирайте числото във временна променлива и го обърнете.
  • Сравнете обратното и оригиналното число.
  • Ако са еднакви, числото е „палиндромно число“.
  • В противен случай числото не е „палиндромно число“.

Самото обръщане е единствената част, която изисква внимание. Две аритметични операции вършат цялата работа, а таблицата по-долу tracги за стойност 171.

Pass a (останалото число) последноDigit = a % 10 сума = (сума * 10) + последноDigit а = а / 10
1 171 1 1 17
2 17 7 17 1
3 1 1 171 0

След последния проход, sum съдържа 171, което е равно на първоначалния вход, така че числото се потвърждава като палиндром.

Как да проверите дали въведеното число е палиндром или не

По-долу е показана програма за палиндром в Java с цикъл WHILE. Цикълът продължава, докато остават цифри, а операторите print показват състоянието на всяка променлива по време на всяко преминаване.

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 Изход:

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

Програма за проверка на палиндром с помощта на цикъл for

По-долу е показан a Java програма за палиндром, използваща for цикъл. Заглавният файл съдържа проверката за изход и делението, така че тялото на цикъла не трябва да се дели отново.

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 Изход:

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

⚠️ Предупреждение: Честа грешка е да се запази a = a / 10; вътре в тялото на цикъла for, докато заглавката вече съдържа a /= 10След това числото се дели два пъти на преминаване, половината от цифрите се пропускат и истински палиндром, като например 121, се отчита неправилно като непалиндром.

Палиндромна програма в Java Използване на низ Reverse

Преобразуването на стойността в текст позволява на StringBuilder да я обърне с едно извикване. Същият метод работи и за думи, които числовият подход не може да обработи.

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 Изход:

true
true
false

Палиндромна програма в Java Използване на рекурсия

Рекурсията сравнява най-външната двойка символи и след това се извиква върху свиващата се средна секция. Методът спира, когато останат по-малко от два символа.

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 Изход:

34043 is palindrome: true
12345 is palindrome: false

Гранични случаи и сравнение на методи

Три входа нарушават наивните имплементации, така че всяка версия трябва да бъде тествана спрямо тях преди употреба.

  1. Отрицателни числа: Стойности като -121 никога не са палиндроми, защото знакът минус няма еквивалент в края. Защитете с if (inputNumber < 0) return false;.
  2. Завършващи нули: Стойността 100 се обръща на 1, така че сравнението правилно връща false. Само числото 0 преминава сред стойностите, завършващи на нула.
  3. Препълване на цяло число: RevИзползването на голямо цяло число, като например 1,999,999,999, може да надхвърли диапазона на целите числа. Декларирайте sum като long, когато входът може да достигне лимита.

Таблицата по-долу сравнява четирите подхода, показани на тази страница.

Начин на доставка Сложност във времето Сложност на пространството Работи за думи бележки
Докато цикъл O (log n) O (1) Не Най-ясната демонстрация на обръщане на цифрите
За контур O (log n) O (1) Не Идентична логика, разделяне само в заглавката
Обратна връзка на StringBuilder О (п) О (п) Да Най-кратък код, разпределя нов низ
Рекурсия О (п) O(n) стек Да Полезно за интервюта, обсъждащи рекурсия

Цифрата extracИзползваният тук модел на действие се появява отново в много упражнения. Продължете с Серия на Фибоначи в Java- Java програма за проверка на просто числои Bubble Алгоритъм за сортиране в JavaЗа самия синтаксис на цикъла, прегледайте за всеки цикъл в Java и по-широкото Java настойнически, и виж Java струни за метода, базиран на текст.

Въпроси и Отговори

Не. Знакът минус се появява само отпред, така че -121 обърнато е 121-, което никога не съвпада. Добавете ранен предпазител, който връща false за всяка стойност под нулата.

Умножението измества вече събраните цифри с едно място наляво, което освобождава позицията на единиците за новосъздадените...tracизтеглена цифра. Това възстановява числото в обратен ред.

Обратната стойност може да надвиши максималното число от 2147483647 и да доведе до отрицателен резултат. Декларирайте акумулатора като long или сравнете стойностите като низове.

Прочетете стойността със Scanner и nextInt, след което я предайте на същата логика за обръщане. Обвийте прочетената стойност в блок try, така че нечисловият вход да не срине програмата.

Обикновено отговорът е „да“, когато бъдат помолени да прегледат кода изрично. Те рядко го маркират без подкана, така че винаги тествайте известен палиндром, като например 121, вместо да се доверявате на мимолетен пример.

Въпросът тества управлението на цикли, целочислената аритметика и разсъжденията в гранични случаи в няколко реда. Той също така разкрива дали кандидатът проверява генерирания от изкуствен интелект код, преди да го изпрати.

Обобщете тази публикация с: