Как определить что число палиндром
Палиндром. Проверить, является ли слово, строка, число палиндромом на C++
В данной статье решается задача по реализации программы(кода) на C++ для проверки, является ли слово, строка или число палиндромом. Программа должна просить ввести строку( не важно слово это или число), проверять, является ли она палиндромом и возвращать результат.
Что такое палиндром?
Палиндром — это строка(или число), которое можно прочитать одинаково справа налево, либо слева направо.
К примеру, слово «кот» не является палиндромом, а слово «потоп» является палиндромом. Также и с числами: число 12314 — не палиндром, число 345543 — палиндром.
Поняв это, можно начинать реализовывать алгоритм программы.
Функция проверки слова на палидром в C++
Для определения, является ли строка палиндромом, напишем функцию, которая примет на вход строку(объект string), а на выходе вернет логическое значение(тип данных bool). Строка будет содержать слово или число, которое функция проверит на палиндромность. Выходное значение true будет соответствовать тому, что строка является палиндромом, false будет соответствовать тому, что строка НЕ является палиндромом.
Обратите внимание, что строка — это, по сути своей, обычный одномерый массив.
Поэтому функция будет просто сравнивать первый и последний элемент массива, после сравнит второй и предпоследний элемент и так далее до середины. Если все они равны, значит строка является палиндромом. Ничего сложного.
Реализуем это в виде кода.
Для начала необходимо определить, сколько символов в строке, для этого воспользуемся методом length().
word — это строка, которую приняла функция. Теперь переменная len хранит значение длины строки.
После чего создадим цикл от 0 до len/2 и будем сравнивать элементы.
Обратите внимание, в цикле есть условие. Если i-ый элемент не равен элементу len-i-1, то сразу возвращается false(То есть не палиндром).
Массивы в C++ нумеруются от 0, поэтому чтобы получить первый элемент строки, нам нужно достать 0-ой элемент из массива, а чтобы последний, то нам нужно достать len-1.
Как работает функция проверки на палиндром
Допустим, у нас слово «мотор», то len будет равна 5.
|м о т о р|
|0 1 2 3 4|
Чтобы получить значение последней буквы, необходимо обратиться к массиву строки с индексом len-1 = 4. А чтобы получить значение первой буквы — обращаемся к элементу 0.
Для наглядности немного визуализируем работу функции:
1.Получаем слово «комок».
3. комок
Сравниваем к и к, они равны, идем дальше.
4. комок
Сравниваем о и о, они равны. Далее цикл останавливается, т.к. запущен до len/2, а это 5/2 = 2. В C++ результатом целочисленного деления является целое число с отброшенной дробной частью.
5. В конце функции возвращается true. Что означает, что слово палиндром.
Если бы во время сравнений букв получилось так, что они НЕ равны, то функция сразу бы завершила работу и вернула значение false. Что означает, что слово не палиндром.
Используем нашу функцию проверки на палиндром в программе на C++
Теперь нашу функцию можно вставить в программу на C++ и использовать. Напишем небольшое приложение, которое просит пользователя ввести слово(или число) в консоль, а после этого сообщает ему, является ли введенное слово палиндромом.
Код нашего приложения — это и есть решение задачи «Проверить, является ли слово палиндромом на C++»
Код программы на C++:
Теперь компилируем, запускаем и проверяем.
Проверим словом «palindrom»
palindrom — не палиндром
Программа сообщила, что слово не является палиндромом, а это так и есть на самом деле.
Проверим выдуманным словом палиндромом «potomotop»
Программа сообщила, что введенное слово палиндром. Всё верно.
Вот таким алгоритмом можно проверить является ли слово палиндромом. Данная программа работает не только со словами, но и с числами. Не требует сторонних библиотек. Решения других задач по программированию на языке C++ можно найти в этом разделе.
Для вас это может быть интересно:
Палиндром. Проверить, является ли слово, строка, число палиндромом на C++ : 3 комментария
Оооооочень понятно и доходчиво, спасибо большое!
Здравствуйте, подскажите, пожалуйста, что если при вводе слова комок программа выдаёт, что слово не является палиндромом, хотя оно палиндром.
Супер. Благодарю за пояснения. Всё понятно.
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.
Как проверить, является ли число палиндромом?
Как проверить, является ли число палиндромом?
любой язык. Любой алгоритм. (за исключением алгоритма превращения числа в строку, а затем реверсирования строки).
30 ответов:
Это одна из проблем проекта Эйлера. Когда я решил в Haskell я сделал именно то, что вы предлагаете, преобразовать число в строку. Тогда тривиально проверить, что строка является паллиндромом. Если он работает достаточно хорошо, то зачем беспокоиться о том, чтобы сделать его более сложным? Быть паллиндромом-это скорее лексическое свойство, чем математическое.
работает только для целых чисел. Из постановки задачи неясно, нужно ли учитывать числа с плавающей запятой или ведущие нули.
выше большинства ответов, имеющих тривиальную проблему, заключается в том, что переменная int, возможно, может переполниться.
нажмите каждую отдельную цифру в стек, а затем вытащите их. Если это то же самое вперед и назад, это палиндром.
Я не заметил никаких ответов, которые решали эту проблему, не используя дополнительного пространства, т. е. все решения, которые я видел, либо использовали строку, либо другое целое число для обратного числа, либо некоторые другие структуры данных.
хотя языки, такие как Java, обертываются при переполнении целых чисел, это поведение не определено в таких языках, как C. [попробуйте повернуть вспять 2147483647 (целое число.MAX_VALUE) в Java] Обходной путь может быть использовать длинный или что-то еще, но стилистически мне это не совсем нравится подход.
(12321 % 10000)/10 = (2321)/10 = 232. И теперь, 10000 должны быть уменьшены в несколько раз 2. Итак, теперь перейдем к Java-коду.
за исключением того, чтобы сделать число строкой,а затем перевернуть строку.
в языках низкого уровня (C/C++) лозунг может иметь место, но один риск переполнения ошибок с большими числами.
результаты в секундах (чем ниже, тем лучше):
зашнурованный 1.50960231881
арифметика 1.69729960569
в Python, есть быстрый, итерационный способ.
Это также предотвращает проблемы с памятью с рекурсией (например, ошибка StackOverflow в Java)
Я ответил на проблему Эйлера, используя очень грубый способ. Естественно, был гораздо более умный алгоритм на дисплее, когда я добрался до Нового разблокированного связанного потока форума. А именно, у члена, который пошел по ручке Begoner, был такой новый подход, что я решил переопределить свое решение, используя его алгоритм. Его версия была в Python (с использованием вложенных циклов), и я переопределил ее в Clojure (используя один цикл/повторение).
здесь для вашего развлечение:
были также общие ответы на шепелявость, но они были для меня недоступны.
просто для удовольствия, это тоже работает.
Определить палиндром
Задачка 1-го курса, простенькая, но почему-то мозги не выдают никаких идей. Звучит так:
Определить, является ли заданное натуральное число палиндромом (т.е. число одинаковое слева направо и наоборот, например 12321).
Конкретно меня интересует именно сам процесс нахождения, потому что я не знаю другого способа сравнения цифр числа, кроме как деления его на 10, а остаток сохраняя в новую переменную. Этот метод не канает, потому что число цифр заведомо неизвестно.
Благодарю за внимание)
Определить строки в файле, содержащие максимальную по длине подстроку-палиндром
Задан текстовый файл input.txt. Требуется определить строки этого файла, содержащие максимальную по.
Определить минимальное количество символов, которые нужно добавить в строку, чтобы получить палиндром
Определить минимальное количество символов, которые нужно добавить в строку, чтобы получить.
Определить минимальное количество символов, которые нужно добавить в строку, чтобы получить палиндром
Здравствуйте, помогите пожалуйсто, был бы очень признателен хотя бы за идею решения(поидеи методом.
Дан одномерный целочисленный массив. Определить, можно ли получить из данной последовательности симметричную (палиндром) путем перестановки в исходной
Помогите написать код к данной задаче, пожалуйста Дан одномерный целочисленный массив.
Палиндромы и «перевёртыши» среди простых чисел
Числовой палиндром — это натуральное число, которое читается слева направо и справа налево одинаково. Иначе говоря, отличается симметрией записи (расположения цифр), причём число знаков может быть как чётным, так и нечётным. Палиндромы встречаются в некоторых множествах чисел, удостоенных собственных названий: среди чисел Фибоначчи — 8, 55 (6-й и 10-й члены одноимённой последовательности); фигурных чисел — 676, 1001 (квадратное и пятиугольное соответственно); чисел Смита — 45454, 983389. Указанным свойством обладает также всякий репдиджит, например 2222222 и, в частности, репьюнит*.
Палиндром можно получить как результат операций над другими числами. Так, в книге «Есть идея!» известного популяризатора науки Мартина Гарднера в связи с этой задачей упоминается «гипотеза о палиндромах». Возьмём любое натуральное число и сложим его с обращённым числом, то есть записанным теми же цифрами, но в обратном порядке. Проделаем то же действие с получившейся суммой и будем повторять его до тех пор, пока не образуется палиндром. Иногда достаточно сделать всего один шаг (например, 312 + 213 = 525), но, как правило, требуется не менее двух. Скажем, число 96 порождает палиндром 4884 только на четвёртом шаге. В самом деле:
А суть гипотезы в том, что, взяв любое число, после конечного числа действий мы обязательно получим палиндром.
Можно рассматривать не только сложение, но и другие операции, включая возведение в степень и извлечение корней. Вот несколько примеров того, как при их помощи из одних палиндромов получаются другие:
До сих пор мы рассматривали в основном составные числа. Теперь обратимся к числам простым. В их бесконечном множестве имеются немало любопытных экземпляров и даже целые семейства палиндромов. Только среди первых ста миллионов натуральных чисел насчитывается 781 простой палиндром, причём двадцать приходятся на первую тысячу, из них четыре числа однозначные — 2, 3, 5, 7 и всего одно двузначное — 11. С такими числами связано немало интересных фактов и красивых закономерностей.
Во-первых, существует единственный простой палиндром с чётным числом цифр — 11. Другими словами, произвольный палиндром с чётным числом цифр, бóльшим двух, число составное, что нетрудно доказать на основе признака делимости на 11.
Во-вторых, первой и последней цифрами любого простого палиндрома могут быть только 1, 3, 7 или 9. Это следует из известных признаков делимости на 2 и на 5. Любопытно, что все простые двузначные числа, записанные с помощью перечисленных цифр (за исключением 19), можно разбить на пары чисел-«перевёртышей» (взаимно обращённых чисел) вида и , где цифры a и b различны. Каждая из них, независимо от того, какое число стоит на первом месте, читается одинаково слева направо и справа налево:
Заглянув в таблицу простых чисел, мы обнаружим аналогичные пары, в записи которых присутствуют и другие цифры, в частности, среди трёхзначных чисел подобных пар наберётся четырнадцать.
Кроме того, среди простых трёхзначных палиндромов встречаются пары чисел, у которых средняя цифра отличается всего на 1:
Аналогичная картина наблюдается и у бо`льших простых чисел, например:
Простые числа-палиндромы могут «задаваться» разными симметричными формулами, которые отражают особенности их записи. Это хорошо видно на примере пятизначных чисел:
Кстати, простые многозначные числа вида встречаются, очевидно, только среди репьюнитов. Таких чисел известно пять. Примечательно, что у каждого из них количество цифр выражается простым числом: 2, 19, 23, 317, 1031. А вот среди простых чисел, у которых все цифры, кроме центральной, единицы, был обнаружен палиндром весьма внушительной длины — в нём 1749 цифр:
Вообще среди простых чисел-палиндромов встречаются удивительные экземпляры. Вот лишь один пример — числовой гигант
А интересен он тем, что содержит 11 811 цифр, которые можно разбить на три палидромические группы, причём в каждой группе количество цифр выражается простым числом (5903 или 5).
Любопытные палиндромические закономерности просматриваются и в группах простых чисел, в записи которых присутствуют определённые цифры. Скажем, только цифры 1 и 3, причём в каждом числе. Так, двузначные простые числа составляют упорядоченные пары 13 — 31 и 31 — 13, из шести трёхзначных простые сразу пять чисел, среди которых есть два палиндрома: 131 и 313, а ещё два числа образуют пары «перевёртышей» 311 — 113 и 113 — 311. Во всех этих случаях составленные пары наглядно представляются в виде числовых квадратов (рис. 1).
Своими свойствами они напоминают магический и латинский квадраты. Например, у среднего квадрата сумма чисел, стоящих в каждой строке и в каждом столбце, равна 444, на диагоналях — 262 и 626. Сложив числа из всех клеток, получим 888. И что характерно, каждая сумма — палиндром. Даже просто выписывая без пробела несколько чисел из одной таблицы, получим новые палиндромы: 3113, 131313131 и т. д. Какое наибольшее число можно составить таким способом? Будет ли оно палиндромом?
Если в каждую из пар 311 — 113 и 113 — 311 добавить 131 или 313, образуются четыре палиндромические тройки. Запишем одну из них в столбик:
Как видим, и сами числа, и нужная их комбинация дают о себе знать при прочтении в разных направлениях. Кроме того, расположение цифр симметрично, а их сумма в каждой строке, каждом столбце и на одной из диагоналей выражается простым числом − 5.
Надо сказать, рассмотренные числа интересны и сами по себе. Например, палиндром 131 — простое циклическое число: при любых последовательных перестановках первой цифры на последнее место он порождает простые числа 311 и 113. Можете ли вы указать другие простые палиндромы, обладающие таким же свойством?
А вот пары чисел-«перевёртышей» 13 — 31 и 113 — 311 при возведении в квадрат дают также пары «перевёртышей»: 169 — 961 и 12769 — 96721. Любопытно, что даже суммы их цифр оказались связаны хитрым образом:
(1 + 1 + 3) 2 = 1 + 2 + 7 + 6 + 9.
Добавим, что среди натуральных чисел имеются и другие пары «перевёртышей» с подобным свойством: 103 — 301, 1102 — 2011, 11113 — 31111 и др. Чем объясняется подмеченная закономерность? Чтобы ответить на этот вопрос, нужно понять, что особенного в записи указанных чисел, какие цифры и в каком количестве могут в ней присутствовать.
Из простых чисел-палиндромов, располагая их определённым образом, скажем построчно, можно составить симметричные фигуры, отличающиеся оригинальным рисунком из повторяющихся цифр.
Вот, например, красивая комбинация из простых палиндромов, записанных с помощью 1 и 3 (кроме первого, рис. 2). Особенность этого числового треугольника в том, что один и тот же фрагмент повторяется трижды, не нарушая симметрию рисунка.
Легко видеть, что общее количество строк и столбцов — число простое (17). К тому же простые числа и суммы цифр: выделенных красным фрагментов (17); каждой строки, за исключением первой (5, 11, 17, 19, 23); третьего, пятого, седьмого и девятого столбцов (7, 11) и «лесенки» из единиц, образующей боковые стороны треугольника (11). Наконец, если двигаться параллельно указанным «сторонам» и складывать по отдельности цифры третьего и пятого рядов (рис. 3), получим ещё два простых числа (17, 5).
Продолжая построение, можно сконструировать на основе данного треугольника более сложные фигуры. Так, ещё один треугольник с аналогичными свойствами нетрудно получить, двигаясь с конца, то есть начать с последнего числа, вычёркивая на каждом шаге две одинаковые симметрично расположенные цифры и переставляя или заменяя другие — 3 на 1 и наоборот. При этом сами цифры следует выбирать с таким расчётом, чтобы образующееся в итоге число оказалось простым. Объединив обе фигуры, получим ромб с характерным узором из цифр, скрывающим в себе немало простых чисел (рис. 4). В частности, сумма выделенных красным цветом цифр равна 37.
Другой пример — треугольник, полученный из исходного после добавления к нему шести простых палиндромов (рис. 5). Фигура сразу привлекает внимание своим изящным обрамлением из единиц. Её окаймляют два простых репьюнита одинаковой длины: 23 единицы составляют «основание» и ещё столько же — «боковые стороны» треугольника.
Ещё несколько фигур
Можно составить также многоугольные фигуры из чисел, обладающие определёнными свойствами. Пусть требуется построить фигуру из простых палиндромов, записанных с помощью 1 и 3, у каждого из которых крайние цифры — единицы, а сумма всех цифр и общее количество единиц в строке — простые числа (исключение — однозначный палиндром). Кроме того, простым числом должно выражаться общее количество строк, а также цифр 1 либо 3, встречающихся в записи.
На рис. 6 приведено одно из решений задачи — «домик», сконструированный из 11 различных палиндромов.
Конечно, не обязательно ограничиваться двумя цифрами и требовать наличия в записи каждого используемого числа всех указанных цифр. Скорее, наоборот: ведь именно их необычные сочетания придают своеобразие узору фигуры. В подтверждение этому приведём несколько примеров красивых палиндромических зависимостей (рис. 7−9).
Теперь, вооружившись таблицей простых чисел, вы и сами сконструируете фигуры вроде предложенных нами.
А напоследок ещё одна диковинка — треугольник, буквально пронизанный вдоль и поперёк палиндромами (рис. 10). В нём 11 строк из простых чисел, а столбцы образованы репдиджитами. И главное: ограничивающий фигуру с боков палиндром 193111111323111111391 — число простое!
Комментарии к статье
*Число Смита — составное число, сумма цифр которого равна сумме цифр его простых делителей.
Репдиджит — натуральное число, в записи которого все цифры одинаковые.
Репьюнит — натуральное число, записанное с помощью одних только единиц.
Как определить что число палиндром
Назовем исходное число и число с переставленными в обратном порядке цифрами взаимно обратными.
Выяснено, что сложение некоторых взаимно обратных чисел приводит к образованию числа-палиндрома. Но для многих взаимно обратных чисел такое число палиндром при сложении не образуется. А что будет, если в этом случае сложить результат сложения с его взаимно обратным числом?
Задание:
Как зависит результат сложения от суммы цифр исходного числа?
Ответ можешь посмотреть здесь.
Примерами являются все однозначные числа, двузначные вида αα, такие как 11 и 99, трехзначные числа вида αβα, например 535 и так далее.
Слово палиндром произошло от греческого слова palindromos ( palнndromos ) , обозначающего “вновь бегущий назад”. Палиндромами могут быть не только числа, но также и слова, предложения и даже тексты. Примером может служить слова ротор, радар или известная фраза “А роза упала на лапу Азора”, которые читаются одинаково как слева направо, так и справа налево. В английском языке это слова «Radar», «I», «Eve», «Deed, «Redivider» и фразы «Madam, I’m Adam, «A man, a plan, a canal. Panama «. Примеры палиндромов встречаются и в природе – молекула ДНК, например, имеющая комплиментарные основания. В ДНК есть отрезки, имеющие одинаковую нуклеотидную последовательность при чтении по обеим цепям спирали в одинаковом направлении. Общее число таких «перевертышей» в геноме человека оценено от 100 тыс. до 1 млн. При этом они относительно равномерно распределены по ДНК.
Греческие поэты еще в 300 году до н.э. начали употреблять палиндромы.