Как проверить является ли число палиндромом
Перейти к содержимому

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

  • автор:

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

В данном коде мы сравниваем исходное число с его перевернутым эквивалентом, используя срез в обратном порядке ([::-1]). Если они равны, то число является палиндромом.

Детальный ответ

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

Добро пожаловать! В этой статье мы рассмотрим, как определить, является ли число палиндромом с использованием языка программирования Python. Что такое палиндром? Палиндром — это число или текст, которые одинаково читаются в обоих направлениях. Например, числа 121 и 1221 являются палиндромами. Теперь, давайте обсудим, как проверить, является ли число палиндромом в Python.

Метод 1: Сравнение числа с его обратной записью

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

 num = 121 reverse_num = int(str(num)[::-1]) if num == reverse_num: print("Число является палиндромом") else: print("Число не является палиндромом") 

В этом примере мы сначала преобразуем число в строку, а затем используем срез с отрицательным шагом, чтобы получить его обратную запись. Затем мы преобразуем его обратно в целое число и сравниваем его с исходным числом. Если они равны, выводим сообщение, что число является палиндромом, иначе выводим сообщение, что число не является палиндромом.

Метод 2: Сравнение цифр числа

Еще один способ проверить, является ли число палиндромом, состоит в сравнении отдельных цифр числа. Давайте рассмотрим пример:

 def is_palindrome(num): num_str = str(num) num_length = len(num_str) for i in range(num_length // 2): if num_str[i] != num_str[num_length - i - 1]: return False return True num = 1221 if is_palindrome(num): print("Число является палиндромом") else: print("Число не является палиндромом") 

В этом примере мы определяем функцию is_palindrome , которая принимает число в качестве аргумента. Сначала мы преобразуем число в строку, чтобы работать с его цифрами отдельно. Затем мы сравниваем цифры с обоих концов числа. Если хотя бы одна пара цифр не совпадает, число не является палиндромом и мы возвращаем False. Если все цифры совпадают, число является палиндромом и мы возвращаем True.

Заключение

Теперь вы знаете два способа, с помощью которых можно определить, является ли число палиндромом в Python. Вы можете выбрать любой из этих методов в зависимости от ваших предпочтений и требований задачи. Надеюсь, эта статья была полезной для вас!

Является ли число палиндромом в Python

Обложка к статье

Число-палиндром — это число, которое читается одинаково как слева направо, так и справа налево. Например, числа 121, 1331 и 12321 являются палиндромами, в то время как числа 123, 456 и 12345 — нет.

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

Проверка числа на палиндром с использованием строковых операций

Один из наиболее простых способов определить, является ли число палиндромом, заключается в получении строки с числом от пользователя и сравнении её с обратной версией этой строки. Обратную версию мы можем получить с помощью среза строки. Если обе строки совпадают, то число является палиндромом.

Пример кода

number = input("Введите число: ") if number == number[::-1]: print("Число является палиндромом.") else: print("Число не является палиндромом.")

Объяснение кода

  1. Пользователь вводит число с клавиатуры с помощью функции input() .
  2. Введенная строка с числом сохраняется в переменной number .
  3. Затем мы сравниваем введенное строку с числом number с его обратным порядком, который получаем с помощью среза [::-1] . Срез [::-1] используется для создания обратного порядка элементов в последовательности. Когда мы используем этот срез со строкой, он возвращает строку, в которой символы расположены в обратном порядке.
  4. Результат сравнения сохраняется в переменной number .
  5. Если строки одинаковые, то число является палиндромом, и выводится соответствующее сообщение.
  6. В противном случае выводится сообщение о том, что число не является палиндромом.

Проверка числа на палиндром с использованием математических операций

Для проверки числа на палиндром с использованием математических операций мы можем применить следующий алгоритм:

  1. Получить число от пользователя.
  2. Создать временную переменную, которая будет инициализирована значением 0.
  3. Используя цикл, извлечь последнюю цифру числа и добавить ее в конец временной переменной.
  4. Уменьшить исходное число на один разряд.
  5. Повторять шаги 3 и 4 до тех пор, пока исходное число не станет равным нулю.
  6. После завершения цикла сравнить исходное число с временной переменной. Если они равны, то число является палиндромом.

Пример кода

# Получаем число от пользователя number = int(input("Введите число: ")) # Создаем временную переменную temp = 0 original_number = number # Используем цикл для извлечения цифр числа и формирования временного числа while number > 0: digit = number % 10 temp = temp * 10 + digit number = number // 10 # Сравниваем исходное число с временным числом if original_number == temp: print("Число является палиндромом.") else: print("Число не является палиндромом.")

Объяснение кода

  1. Получаем число от пользователя с помощью функции input . Пользователь должен ввести целое число
  2. Создаем временную переменную temp , которая будет использоваться для построения перевернутой версии исходного числа. Мы также сохраняем копию исходного числа в переменной original_number , чтобы в конце сравнить исходное число с его перевернутой версией.
  3. Запускаем цикл while , который будет работать, пока number не станет равным нулю.
  4. digit = number % 10 : В этой строке мы используем оператор % (остаток от деления), чтобы получить последнюю цифру числа number . Например, если number равно 123, то number % 10 вернет 3, так как это остаток от деления 123 на 10.
  5. temp = temp * 10 + digit : Здесь мы обновляем значение временной переменной temp , чтобы добавить в нее последнюю цифру числа. Мы умножаем temp на 10, чтобы освободить место для новой цифры в конце числа, а затем добавляем digit , чтобы добавить новую цифру. Например, если temp равно 12, а digit равно 3, то после выполнения этой строки temp будет равно 123.
  6. number = number // 10 : Здесь мы используем оператор // для целочисленного деления, чтобы удалить последнюю цифру из числа number . Например, если number равно 123, то после выполнения этой строки number будет равно 12.
  7. После завершения цикла сравниваем значение исходного числа original_number с перевернутой версией числа temp . Если они равны, выводим сообщение о том, что число является палиндромом, иначе выводим сообщение о том, что число не является палиндромом.

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

Любой язык. Любой алгоритм. (за исключением алгоритма превращения числа в строку, а затем обратного обращения строки).

Поделиться Источник 13 октября 2008 в 22:10

30 ответов

Для любого заданного числа:

n = num; rev = 0; while (num > 0) < dig = num % 10; rev = rev * 10 + dig; num = num / 10; >

Если n == rev , то num является палиндромом:

cout  

Поделиться 13 октября 2008 в 22:18

Это одна из проблем проекта Эйлера . Когда я решил ее в Haskell, я сделал именно то, что вы предлагаете, преобразовать число в строку. Затем тривиально проверить, что строка является палиндромом. Если она работает достаточно хорошо, то почему надо заморачиваться, делая ее более сложной? Быть палиндромом - это лексическое свойство, а не математическое.

Поделиться 13 октября 2008 в 22:14

def ReverseNumber(n, partial=0): if n == 0: return partial return ReverseNumber(n // 10, partial * 10 + n % 10) trial = 123454321 if ReverseNumber(trial) == trial: print("It's a Palindrome!") 

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

Поделиться 13 октября 2008 в 22:26

Вышеуказанные ответы, имеющие тривиальную проблему, заключаются в том, что переменная int может быть переполнена.

boolean isPalindrome(int x) < if (x < 0) return false; int div = 1; while (x / div >= 10) < div *= 10; >while (x != 0) < int l = x / div; int r = x % 10; if (l != r) return false; x = (x % div) / 10; div /= 100; >return true; > 

Поделиться 28 августа 2013 в 05:47

int is_palindrome(unsigned long orig) < unsigned long reversed = 0, n = orig; while (n >0) < reversed = reversed * 10 + n % 10; n /= 10; >return orig == reversed; > 

Поделиться 13 октября 2008 в 22:27

Отправьте каждую отдельную цифру в стек, а затем отключите их. Если это одно и то же вперемешку и обратно, это палиндром.

Поделиться 13 октября 2008 в 22:15

Самый быстрый способ, который я знаю:

bool is_pal(int n) < if (n % 10 == 0) return 0; int r = 0; while (r < n) < r = 10 * r + n % 10; n /= 10; >return n == r || n == r / 10; > 

Поделиться 20 октября 2015 в 06:40

Я не заметил никаких ответов, которые решили эту проблему без использования дополнительного пространства, то есть, все решения, которые я видел, использовали строку или другое целое число для обращения числа, или некоторые другие структуры данных.

Хотя языки, такие как Java, обертывают на целочисленном переполнении, это поведение не определено в языках, таких как C. ( Попробуйте обратить 2147483647 (Integer.MAX_VALUE) в Java )
Обходное решение может быть использованием длинного или чего-то подобного, но, стилистически, мне не нравится этот подход.

Теперь концепция палиндромного числа заключается в том, что число должно читаться одинаково вперед и назад. Отлично. Используя эту информацию, мы можем сравнить первую цифру и последнюю цифру. Хитрость заключается в том, что для первой цифры нам нужен порядок числа. Скажем, 12321. Деление этого на 10000 даст нам ведущий 1. Последующий 1 можно получить, взяв модуль с 10. Теперь, чтобы уменьшить это до 232. (12321 % 10000)/10 = (2321)/10 = 232 . И теперь, 10000 нужно уменьшить на коэффициент 2. Теперь перейдем к коду Java.

private static boolean isPalindrome(int n) < if (n < 0) return false; int div = 1; // find the divisor while (n / div >= 10) div *= 10; // any number less than 10 is a palindrome while (n != 0) < int leading = n / div; int trailing = n % 10; if (leading != trailing) return false; // % with div gets rid of leading digit // dividing result by 10 gets rid of trailing digit n = (n % div) / 10; // got rid of 2 numbers, update div accordingly div /= 100; >return true; > 

Отредактировано в соответствии с предложением Hardik о том, чтобы охватить случаи, когда в числе есть нули.

Поделиться 23 марта 2016 в 21:42

Просто для веселья, этот также работает.

a = num; b = 0; if (a % 10 == 0) return a == 0; do < b = 10 * b + a % 10; if (a == b) return true; a = a / 10; >while (a > b); return a == b; 

Поделиться 14 октября 2008 в 06:46

В Python есть быстрый, итеративный способ.

def reverse(n): newnum=0 while n>0: newnum = newnum*10 + n % 10 n//=10 return newnum def palindrome(n): return n == reverse(n) 

Это также предотвращает проблемы с памятью при рекурсии (например, ошибка StackOverflow в Java)

Поделиться 01 октября 2015 в 19:11

за исключением того, что число становится строкой, а затем разворачивается в обратном направлении.

Почему отклонять это решение? Это легко реализовать и читаемо . Если вас спросили без компьютера, является ли 2**10-23 десятичным палиндромом, вы, конечно, проверили бы его, записав его в десятичном виде.

В Python, по крайней мере, лозунг'string operations are slower than arithmetic' на самом деле ложный. Я сравнил арифметический алгоритм Сминка с простым разворотным строком int(str(i)[::-1]) . Не было существенной разницы в скорости - это произошло, что разворот строки был незначительно быстрее.

В скомпилированных языках (C/C++) лозунг может удержаться, но один рискует переполнить ошибки большими числами.

def reverse(n): rev = 0 while n > 0: rev = rev * 10 + n % 10 n = n // 10 return rev upper = 10**6 def strung(): for i in range(upper): int(str(i)[::-1]) def arithmetic(): for i in range(upper): reverse(i) import timeit print "strung", timeit.timeit("strung()", setup="from __main__ import strung", number=1) print "arithmetic", timeit.timeit("arithmetic()", setup="from __main__ import arithmetic", number=1) 

Результаты в секундах (низ - лучше):

строка 1.50960231881 арифметическая 1.69729960569

Поделиться 11 ноября 2012 в 18:00

Я ответил на проблему Эйлера очень грубым способом. Естественно, был гораздо более умный алгоритм на экране, когда я попал в новый незакрытый связанный поток форума. А именно, член, который прошёл по рукоятке Begoner, имел такой новый подход, что я решил перереализовать свое решение, используя его алгоритм. Его версия была в Python (используя вложенные циклы), и я перереализовал ее в Clojure (используя один цикл/рекур).

Вот для вашего удовольствия:

(defn palindrome? [n] (let [len (count n)] (and (= (first n) (last n)) (or (>= 1 (count n)) (palindrome? (. n (substring 1 (dec len)))))))) (defn begoners-palindrome [] (loop [mx 0 mxI 0 mxJ 0 i 999 j 990] (if (> i 100) (let [product (* i j)] (if (and (> product mx) (palindrome? (str product))) (recur product i j (if (> j 100) i (dec i)) (if (> j 100) (- j 11) 990)) (recur mx mxI mxJ (if (> j 100) i (dec i)) (if (> j 100) (- j 11) 990)))) mx))) (time (prn (begoners-palindrome))) 

Также были общие ответы на Lisp, но они были неуступчивы для меня.

Поделиться 13 октября 2008 в 22:49

Вот версия Scheme, которая создает функцию, которая будет работать против любой базы. У нее есть проверка избыточности: быстро возвращаем false, если число кратно базе (заканчивается на 0).
И она не перестраивает все обратное число, только половину.
Это все, что нам нужно.

(define make-palindrome-tester (lambda (base) (lambda (n) (cond ((= 0 (modulo n base)) #f) (else (letrec ((Q (lambda (h t) (cond ((< h t) #f) ((= h t) #t) (else (let* ((h2 (quotient h base)) (m (- h (* h2 base)))) (cond ((= h2 t) #t) (else (Q h2 (+ (* base t) m)))))))))) (Q n 0))))))) 

Поделиться 30 июня 2009 в 17:49

Рекурсивное решение в ruby, без преобразования числа в строку.

def palindrome?(x, a=x, b=0) return x==b if a 

Поделиться 01 марта 2016 в 23:42

package main import "fmt" func main() < n := 123454321 r := reverse(n) fmt.Println(r == n) >func reverse(n int) int < r := 0 for < if n >0 < r = r*10 + n%10 n = n / 10 >else < break >> return r > 

Поделиться 12 августа 2015 в 08:02

Отключите первую и последнюю цифры и сравните их, пока не закончите. Может быть, осталась цифра или нет, но в любом случае, если все выведенные цифры совпадают, это палиндром.

Поделиться 13 октября 2008 в 22:30

Вот еще одно решение в c++ с использованием шаблонов. Это решение будет работать для сравнения строк палиндрома, нечувствительного к регистру.

template bool palindrome(bidirection_iter first, bidirection_iter last) < while(first != last && first != --last) < if(::toupper(*first) != ::toupper(*last)) return false; else first++; >return true; > 

Поделиться 13 июля 2014 в 10:19

int reverse(int num) < assert(num >= 0); // for non-negative integers only. int rev = 0; while (num != 0) < rev = rev * 10 + num % 10; num /= 10; >return rev; > 

Это тоже казалось работать, но вы рассмотрели возможность того, что обратное число может переполняться? Если оно переполняется, поведение является специфичным для языка (Для Java число обертывается при переполнении, но в C/C++ его поведение неопределено). Юк.

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

Теперь получить и отсеять последнюю цифру легко. Однако, получить и отсеять первую цифру в общем виде требует некоторой мысли. Нижеприведенное решение заботится об этом.

int isIntPalindrome(int x) < if (x < 0) return 0; int div = 1; while (x / div >= 10) < div *= 10; >while (x != 0) < int l = x / div; int r = x % 10; if (l != r) return 0; x = (x % div) / 10; div /= 100; >return 1; > 

Поделиться 16 мая 2015 в 20:49

Я всегда использую это решение на Python из-за его компактности.

def isPalindrome(number): return int(str(number)[::-1])==number 

Поделиться 18 марта 2015 в 14:52

let reverseNumber n = let rec loop acc = function |0 -> acc |x -> loop (acc * 10 + x % 10) (x/10) loop 0 n let isPalindrome = function | x when x = reverseNumber x -> true | _ -> false 

Поделиться 04 мая 2012 в 15:24

Чтобы проверить, является ли данное число палиндромом или нет (Java Code)

class CheckPalindrome< public static void main(String str[])< int a=242, n=a, b=a, rev=0; while(n>0) < a=n%10; n=n/10;rev=rev*10+a; System.out.println(a+" "+n+" "+rev); // to see the logic >if(rev==b) System.out.println("Palindrome"); else System.out.println("Not Palindrome"); > > 

Поделиться 03 июня 2014 в 14:14

def palindrome(n): d = [] while (n > 0): d.append(n % 10) n //= 10 for i in range(len(d)/2): if (d[i] != d[-(i+1)]): return "Fail." return "Pass." 

Поделиться 01 февраля 2013 в 04:55

метод с немного лучшим постоянным коэффициентом, чем метод @sminks:

num=n lastDigit=0; rev=0; while (num>rev) < lastDigit=num%10; rev=rev*10+lastDigit; num /=2; >if (num==rev) print PALINDROME; exit(0); num=num*10+lastDigit; // This line is required as a number with odd number of bits will necessary end up being smaller even if it is a palindrome if (num==rev) print PALINDROME 

Поделиться 02 августа 2011 в 05:24

Число является палиндромным, если его строковое представление является палиндромным:

def is_palindrome(s): return all(s[i] == s[-(i + 1)] for i in range(len(s)//2)) def number_palindrome(n): return is_palindrome(str(n)) 

Поделиться 06 июля 2012 в 17:59

Просто получите количество цифр числа через функции математики, а затем выполните итерацию с помощью операций '/' и '%'. После x = (x % делитель) / 10 мы должны разделить делитель на 100, так как мы сделали 2 нулевые операции.

public static boolean isPalindrome(int x) < if (x < 0) return false; if (x < 10) return true; int numDigits = (int)(Math.log10(x)+1); int divider = (int) (Math.pow(10, numDigits - 1)); for (int i = 0; i < numDigits / 2; i++) < if (x / divider != x % 10) return false; x = (x % divider) / 10; divider /= 100; >return true; > 

Поделиться 17 января 2017 в 07:55

Вот решение, использующее списки в виде стеков в Python:

def isPalindromicNum(n): """ is 'n' a palindromic number? """ ns = list(str(n)) for n in ns: if n != ns.pop(): return False return True 

Помещение в стек считает только самую правую сторону числа для сравнения, и не удается быстро уменьшить проверки

Поделиться 29 июня 2013 в 19:54

class Palindrome_Number< void display(int a)< int count=0; int n=a; int n1=a; while(a>0) < count++; a=a/10; >double b=0.0d; while(n>0) < b+=(n%10)*(Math.pow(10,count-1)); count--; n=n/10; >if(b==(double)n1) < System.out.println("Palindrome number"); >else < System.out.println("Not a palindrome number"); >> > 

Поделиться 26 сентября 2014 в 11:26

 public class Numbers < public static void main(int givenNum) < int n= givenNum int rev=0; while(n>0) < //To extract the last digit int digit=n%10; //To store it in reverse rev=(rev*10)+digit; //To throw the last digit n=n/10; >//To check if a number is palindrome or not if(rev==givenNum) < System.out.println(givenNum+"is a palindrome "); >else < System.out.pritnln(givenNum+"is not a palindrome"); >> > 

Поделиться 21 июля 2013 в 05:53

public static void main(String args[]) < System.out.print("Enter a number: "); Scanner input = new Scanner(System.in); int num = input.nextInt(); int number = num; int reversenum = 0; while (num != 0) < reversenum = reversenum * 10; reversenum = reversenum + num % 10; num = num / 10; >if (number == reversenum) System.out.println("The reverse number is " + reversenum + "\nThen the number is palindrome."); else System.out.println("The reverse number is " + reversenum + "\nThen the number is not palindrome."); > 

Поделиться 09 февраля 2016 в 14:17

public class PalindromePrime < private static int g ,n =0,i,m ; private javax.swing.JTextField jTextField; static String b =""; private static Scanner scanner = new Scanner( System.in ); public static void main(String [] args) throws IOException < System.out.print(" Please Inter Data : "); g = scanner.nextInt(); System.out.print(" Please Inter Data 2 : "); m = scanner.nextInt(); count(g,m); >public static int count(int L, int R) < int resultNum = 0; for( i= L ; i=1 ;n -- ) < if(i%n==0)< count = count + 1 ; // System.out.println(" Data : \n " +count ); >> if(count == 2) < //b = b +i + "" ; String ss= String .valueOf(i); // System.out.print("\n" +i ); if(isPalindrome(i)) < //0 System.out.println("Number : " + i + " is a palindrome"); //number2[b] = Integer.parseInt(number_ayy[b]); //String s = String .valueOf(i); //System.out.printf("123456", s); resultNum++; >else < //*System.out.println("Number : " + i + " is Not a palindrome"); >//System.out.println(" Data : \n " +ss.length() ); > // palindrome(i); > // System.out.print(" Data : "); // System.out.println(" Data : \n " +b ); return resultNum; > @SuppressWarnings("unused") public static boolean isPalindrome(int number ) < int p = number; // ประกาศ p เป็น int ให้เท่ากับ number ของ ตัวที่ มาจาก method int r = 0; //ประกาศ r เป็น int โดยให้มีค่าเรื่องต้นเท่ากับ 0 int w = 0 ; while (p != 0) < // เงื่อนไข While ถ้า p ไม่เท่ากับ 0 เช่น 2!= 0 จริง เข้า w = p % 10; // ประกาศตัว แปร W ให้ เท่ากับค่า p ที่มาจาก parramiter ให้ & mod กับ 10 คือ เช่น 2 % 10 = 2 ; w= 2 ; 3% 10 ; w =3 r = r * 10 + w; // (ให้ R ที่มาจาก การประกาศค่ตัวแปร แล้ว * 10) + w จะมาจากค่า w = p % 10; ที่ mod ไว้ เช่น 0*10 + 2 = 2 p = p / 10; //แล้วใช้ p ที่จมาจากตัว paramiter แล้วมาหาร 10 เพราะถ้าไม่มี ก็จะสามารถพิมพ์ค่าออกมาได้ || ทำไงก็ได้ให้เป็น 0 และเอามาแทนค่ตัวต่อไป >// 1 วนวูปเช็คว่า (p != 0) หรือไม่ โดย p มาจาก p = number ที่รับมา // 2 r = (r * 10) + (p%10) ; //3 p = p /10 ; เพื่อเช็ค ว่าให้มันเป็น 0 เพื่อหลุด Loop if (number == r) < // for(int count = 0 ; count return false; > public static int countLines(String str) < if (str == null || str.length() == 0) return 0; int lines = 1; int len = str.length(); for( int pos = 0; pos < len; pos++) < char c = str.charAt(pos); if( c == '\r' ) < System.out.println("Line 0 : " + "'"+str ); lines++; if ( pos+1 < len && str.charAt(pos+1) == '\n' ) System.out.println("Line : " + "'"+str ); pos++; >else if( c == '\n' ) < lines++; System.out.println("Line 2 : " + "'"+str ); >> return lines; > public static int countLines1(String sd) throws IOException < LineNumberReader lineNumberReader = new LineNumberReader(new StringReader(sd)); int count = 0 ; System.out.printf("Line : " , count = count + 1 ); lineNumberReader.skip(Long.MAX_VALUE); return lineNumberReader.getLineNumber(); >> 

Задача "Палиндром". Python

Задача: По данной строке определите, является ли она палиндромом (то есть верно ли, что она одинаково читается слева направо и справа налево) Ввод На вход подается строка без пробелов. Длина строки не превышает 200. Буквы разного регистра считаются различными. Вывод Необходимо вывести yes, если строка является палиндромом, и no в противном случае. Пример: abba yes qwerq no

slovo = str(input()) x = len(slovo) i = 0 x = x - 1 k = 0 while x - i >= i: if slovo[x - i] == slovo[i]: i += 1 else: k = 1 break if k == 1: print("no") else: print("yes") 

Неправильный ответ на 6 тесте. Я и понятие не имею какое слово это может быть. Кто-то может придумает? UPD: Тесты - это проверка моего кода на сайте. Программа подставляет в мой код разные слова и проверяет правильность моего решения. 5 слов - правильно. 6 тест - нет. Я не могу придумать такое слово и не знаю какое слово подставляла в этом тесте программа.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *