Составить программу которая определяет является ли число палиндромом

Продолжаем разбирать задачки с сайта Leetcode. В прошлый раз было про массив и сумму чисел, теперь тоже необычное.

Условия

В переменной X лежит какое-то целое число

Задача — проверить, является ли это число палиндромом.

Задача со звёздочкой — проверить на наличие палиндрома, не используя строки.

Палиндром — это когда строка или число одинаково читается в прямом и обратном направлении:

121 — это палиндром.

А роза упала на лапу Азора — тоже палиндром (если не считать заглавных букв).

12321 — и это палиндром.

Решение, где используем строки

Самый простой способ проверить, число в переменной палиндром или нет, — преобразовать его в строку, выставить знаки задом наперёд и сравнить с оригиналом. Этим мы сразу решаем проблему отрицательных чисел, когда «−121»превращается в «121−» и сразу становится ясно, что это не палиндром.

Сначала решим это на Python. Тут вообще суть в одной строке:

X = 121 if str(X) == str(X)[::-1]: print(«Это палиндром») else: print(«Это не палиндром»)

Здесь мы использовали трюк с переворачиванием строки без её изменения — применили конструкцию [::-1]. Работает это так:

Математические операции для поиска палиндрома

  • Первым параметром указывают начало, откуда начинать обработку строки. Раз ничего не указано, то начинаем с первого символа.
  • Второй параметр — на каком по счёту символе надо остановиться. Здесь тоже ничего нет, поэтому алгоритм пройдёт до конца строки.
  • Последний параметр — шаг и направление обработки. У нас указана минус единица, значит, алгоритм обработает строку справа налево, на каждом шаге считывая по символу.
  • В итоге этот код вернёт нам строку, собранную в обратном порядке, при этом с оригинальной строкой ничего не случится — она останется неизменной.
Читайте также:
Программа чтобы сжимать фильмы

Программа для проверки, является ли введенное число палиндромом

Программа принимает на вход число и определяет, является ли оно палиндромом.

Решение задачи

  1. Принимаем число и записываем его значение в переменную.
  2. Создаем еще одну переменную и помещаем в нее то же самое значение.
  3. Далее при помощи цикла while мы «переворачиваем» исходное число, то есть находим как оно пишется в обратном порядке. Мы уже решали такую задачу ранее.
  4. Далее сравниваем полученное число с сохраненной ранее копией первоначального числа. Если они равны, то исходное число — это палиндром.
  5. Выводим полученный результат на экран.
  6. Конец.

Исходный код

Ниже дан исходный код для проверки, является ли введенное число палиндромом. Результаты работы программы также даны ниже.

n = int(input(«Введите число:»)) temp = n rev = 0 while(n > 0): dig = n % 10 rev = rev * 10 + dig n = n // 10 if(temp == rev): print(«Это палиндром!») else: print(«Это не палиндром!»)

Объяснение работы программы

  1. Пользователь вводит число и оно записывается в переменную n .
  2. Затем это же число дублируется в переменную temp .
  3. Далее при помощи уже разобранной нами процедуры число n записывается в обратном порядке и сохраняется в переменной rev .
  4. Затем это число (находящееся в переменной rev ) сравнивается с сохраненной нами ранее копией введенного числа (которая находится в переменной temp ).
  5. Если эти числа равны, то исходное число является палиндромом.
  6. В противном случае оно палиндромом не является.
  7. В завершении мы выводим конечный результат на экран.

Результаты работы программы

Пример 1 Введите число:121 Это палиндром! Пример 2 Введите число:567 Это не палиндром!

Примечание переводчика

Как и в прошлом примере, при помощи методов строк эту задачу можно решить гораздо короче. Предоставим читателям самим это сделать.

Читайте также:
Название компьютерных программ для работы

Задача Палиндром на Python (Питон): 10+ вариантов решений

Источник: pythonist.ru

Дано натуральное n. Определить, является ли это число палиндромом

Вот мой код, но я не знаю, что делать дальше. Как мне дописать этот код, не используя массивы, указатели, строки и тому подобное. Эта задача должна решаться как-то с помощью цикла.

#include #include #include using namespace std; int main() < setlocale(0, «rus»); int n, sum(0); double i(0.0); begin: cout > n; if (n < 0) goto begin; int copy_n1 = n; while (copy_n1 >0) < copy_n1 /= 10; ++i; >int copy_n2 = n; const int copy_i = i; for (int k = 0; k < copy_i; ++k) < i -= 1.0; double a = pow(10.0, i); int y = copy_n2 % int(a); /////// а дальше я не знаю, как делать >cout
Отслеживать
13.6k 12 12 золотых знаков 43 43 серебряных знака 72 72 бронзовых знака
задан 1 ноя 2018 в 17:50
user314318 user314318

Вы человеческими словами можете описать, как это определить?
– user176262
1 ноя 2018 в 17:54
Число 10 является палиндромом ( 010 ) или не является?
1 ноя 2018 в 18:04
да читайте вы число как строку и всё. работы в разы меньше.
1 ноя 2018 в 18:13
– user176262
1 ноя 2018 в 18:14
1 ноя 2018 в 18:15

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Желательно использовать рекурсивную функцию. Для упрощения решения проблемы можно использовать строковое представление данных. Предлагаю вариант использования нерекурсивной функции, данную вещь можно просто в main использовать.

#include using namespace std; int reverse_number(int number) < int n = 0; while(number) < n = 10*n + number%10; number /= 10; >return n; > int main() cout > number; if (number == reverse_number(number)) cout

Читайте также:
Что такое программа битрикс24

не забудь прописать setlocate и так далее.

Совет

не используй go to — усложняет восприятие кода и качество кода, посторайся обходится без него

Источник: ru.stackoverflow.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru