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

⚡ Умное резюме

Программа чисел палиндромов в Java Определяет, считывается ли значение одинаково как вперед, так и назад, путем перестановки его цифр. В данной статье представлен алгоритм, версия с циклом while, версия с циклом for, строковый метод, рекурсия, граничные случаи и анализ сложности с проверенными результатами.

  • 🔁 Основное определение: Число-палиндром остается неизменным после инвертирования его цифр, как, например, 131, 393 и 34043.
  • Revэрсал техника: Оператор модуля extracЭто последняя цифра, и целочисленное деление удаляет её, по одной цифре за проход.
  • 🧮 Правило накопителя: При каждом проходе текущая сумма умножается на десять, после чего добавляется новая сумма.tracцифра Теда.
  • 🔂 Выбор петли: Цикл while и цикл for дают идентичные результаты при условии, что деление выполняется ровно один раз за итерацию.
  • 🔤 Метод строк: Функция StringBuilder reverse напрямую сравнивает текст и работает как со словами, так и с числами.
  • ⚠️ Крайние случаи: Однозначные числа всегда являются палиндромами, отрицательные значения никогда не являются палиндромами, а нули в конце нарушают сравнение чисел.
  • 🇧🇷 Профиль сложности: Обе версии цикла работают за время O(log n), пропорциональное количеству цифр, и используют дополнительное пространство O(1).

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

Что такое число-палиндром?

A Число палиндрома Палиндром — это число, которое остаётся тем же самым числом при перевёртывании. Например, 131. При перевёртывании цифр оно остаётся тем же числом. Палиндром обладает зеркальной симметрией относительно вертикальной оси. Тот же принцип применим и к слову, которое имеет то же написание при перевёртывании букв.

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

121, 393, 34043, 111, 555, 48084

Примеры слов-палиндромов

LOL, MADAM

По определению, каждая цифра от 0 до 9 является палиндромом, поскольку при перестановке одной цифры получается та же самая цифра.

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

Ниже представлена ​​логика алгоритма вычисления палиндромных чисел. Java:

  • Получите входной номер, который необходимо проверить на предмет Палиндром.
  • Скопируйте число во временную переменную и переверните его.
  • Сравните перевернутое и исходное число.
  • Если они одинаковые, то это «число-палиндром».
  • В противном случае это число не является «палиндромом».

Только сам процесс обратного преобразования требует внимания. Две арифметические операции выполняют всю работу, а таблица ниже... tracоценивает их по значению 171.

Проходить а (оставшееся число) последнийDigiт = а % 10 сумма = (сумма * 10) + последнийDigit а = а / 10
1 171 1 1 17
2 17 7 17 1
3 1 1 171 0

После последнего прохода сумма оказывается равной 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

Ниже приведен 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 (журнал n) O (1) Нет Наиболее наглядная демонстрация обратного порядка цифр
Для цикла O (журнал n) O (1) Нет Идентичная логика, разделение только в заголовке.
StringBuilder reverse О (п) О (п) Да Кратчайший код, выделяет новую строку.
Рекурсия О (п) стек O(n) Да Полезно для обсуждения рекурсии на собеседованиях.

Цифра extracИспользуемая здесь схема повторится во многих упражнениях. Продолжайте с... Последовательность Фибоначчи в Java, Java программа для проверки простого числа, и Bubble Алгоритм сортировки в JavaЧто касается синтаксиса цикла, ознакомьтесь с информацией по ссылке: для каждого цикла в Java и более широких Java учебник, и посмотреть Java струны для текстового метода.

Часто задаваемые вопросы (FAQ)

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

При умножении уже собранные цифры сдвигаются на одну позицию влево, освобождая позицию единиц для вновь собранных.tracЦифра Теда. Эта команда восстанавливает число в обратном порядке.

Обратное значение может превысить максимальное значение типа int, равное 2147483647, и привести к отрицательному результату. Объявите аккумулятор как тип long или сравнивайте значения как строки.

Считайте значение с помощью Scanner и nextInt, затем передайте его в ту же логику обратного преобразования. Оберните операцию чтения в блок try, чтобы нечисловые входные данные не привели к сбою программы.

Обычно да, если вас прямо просят проверить код. Они редко отмечают это без запроса, поэтому всегда проверяйте известный палиндром, например, 121, а не доверяйте проверенному примеру.

Этот вопрос проверяет навыки управления циклами, целочисленной арифметики и рассуждений о крайних случаях всего в нескольких строках кода. Он также показывает, проверяет ли кандидат сгенерированный ИИ код перед его отправкой.

Подведем итог этой публикации следующим образом: