Проверьте, является ли заданное число
палиндромом.
Число называется
палиндромом, если оно читается одинаково слева направо и справа налево.
Вход. Одно неотрицательное целое 32-битное число.
Выход. Выведите “Yes”, если число является
палиндромом, и “No” в противном
случае.
Пример
входа |
Пример
выхода |
121 |
Yes |
строки
Анализ алгоритма
Прочитаем
входное число как строку в символьный массив s. Пусть len – длина строки s, уменьшенная на 1 (индекс последнего символа массива). Строка
является палиндромом, если для всех 0 ≤ i ≤ len / 2 выполняется
условие s[i] = s[len – i].
Рассмотрим,
например, число 4570754 длины 7. Тогда len
= 7 – 1 = 6.
Имеют место следующие равенства:
·
s[0] = s[6 – 0] = s[6] = ‘4’;
·
s[1] = s[6 – 1] = s[5] = ‘5’;
·
s[2] = s[6 – 2] = s[4] = ‘7’;
Реализация алгоритма
Входное число храним
в символьном массиве s.
char s[50];
Читаем входное
число как строку. Устанавливаем len равным
индексу последней цифры.
gets(s);
len = strlen(s)
- 1;
Инициализируем flag = 0, означающее
что число является палиндромом.
flag = 0;
Если для некоторого i нарушается равенство s[i] = s[len – i], то число не является палиндромом, и
устанавливаем flag = 1.
for (i = 0; i <= len / 2; i++)
if (s[i] != s[len - i]) flag = 1;
В зависимости от значения переменной flag выводим результат.
if (flag == 0) printf("Yes\n"); else
printf("No\n");
Реализация
алгоритма – функция IsPalindrome
Входное число храним в символьном массиве s.
char
s[50];
Функция IsPalindrome проверяет,
является ли строка s палиндромом.
int
IsPalindrome(char *s)
{
int i = 0, j = strlen(s) - 1;
while(i < j)
{
if (s[i] != s[j]) return 0;
i++; j--;
}
return 1;
}
Основная часть программы. Читаем входное число как строку.
gets(s);
Проверяем,
является ли строка s палиндромом.
flag = IsPalindrome(s);
В зависимости от
значения переменной flag выводим
результат.
if
(flag == 1) printf("Yes\n"); else printf("No\n");
Реализация алгоритма – STL reverse
Читаем входное
число как строку p.
cin >> p;
Обращаем строку p: q = reverse(p).
q = p; reverse(q.begin(),q.end());
Если строки p и q одинаковы, то входная строка является палиндромом.
if
(p == q) printf("Yes\n"); else printf("No\n");
Java реализация
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner con = new
Scanner(System.in);
char[] s = con.nextLine().toCharArray();
int flag = 0, len = s.length - 1;
for(int i = 0; i < len - i; i++)
if (s[i] != s[len - i]) flag = 1;
if (flag == 0)
System.out.println("Yes");
else
System.out.println("No");
con.close();
}
}
Java реализация – функция IsPalindrome
import java.util.*;
public class Main
{
public static int IsPalindrome(String s)
{
int i = 0, j = s.length() - 1;
while(i < j)
{
if (s.charAt(i) != s.charAt(j)) return 0;
i++; j--;
}
return 1;
}
public static void main(String[] args)
{
Scanner con = new
Scanner(System.in);
String s = con.next();
int flag = IsPalindrome(s);
if (flag == 1)
System.out.println("Yes");
else
System.out.println("No");
con.close();
}
}
Python реализация
Читаем входное число как строку.
a = input()
Реверс строки a можно получить при помощи среза: a[::-1]. Проверяем, совпадает ли строка a со своим
реверсом. В зависимости от результата выводим соответствующий ответ.
if a == a[::-1]:
print("Yes")
else:
print("No")