C/C++

Решение задач по с++

Студент Алихан обожает математику. Самые любимые его числа - это палиндромы. Когда Алихан видит число, которое не является палиндромом, он расстраивается. Чтобы поднять настроение Алихану, вы можете найти такое число, которое будет больше изначального и при этом палиндромом. Если Алихан сразу видит палиндром, он уже счастлив. Помогите нам сделать Алихана счастливым.

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

Input Format

Вводится одно целое натуральное число N.

Constraints

N состоит не более, чем из 100 000 цифр.

Output Format

Выведите одно число - ответ на задачу.

Sample Input 0

1221
Sample Output 0

1221
Sample Input 1

1234
Sample Output 1

1331
#include <iostream>
#include <string>
using namespace std;
bool is_palindrome(string& num) {
return num == string(num.rbegin(), num.rend());
}
string inc(const string& num) {
string box;
int n = 1;
for (auto dig : num) {
dig += n;
if (dig == 58) {
dig -= 10;
n = 1;
} else {
n = 0;
}
box.push_back(dig);
}
return string(box.rbegin(), box.rend());
}
string repairs(string& num) {
auto mid = num.length() >> 1;
auto head = string(num.begin(), num.begin() + mid);
auto tail = string(num.begin() + mid, num.end());
auto rev = string(head.rbegin(), head.rend());
if (head.length() == tail.length()) {
if (rev > tail) return head + rev;
else {
auto beg = inc(rev);
return beg + string(beg.rbegin(), beg.rend());
}
} else {
auto beg = string(num.begin() + mid + 1, num.end());
if (rev > beg) {
return head + tail.at(0) + string(head.rbegin(), head.rend());
}
else {
if (tail.at(0) != '9') {
return head + char(tail.at(0) + 1) + string(head.rbegin(), head.rend());
}
else {
auto beg = inc(rev);
return beg + "0" + string(beg.rbegin(), beg.rend());
}
}
}
return "Error!";
}
int main() {
string num;
while (true) {
cin >> num;
if (is_palindrome(num)) cout << num;
else cout << repairs(num);
puts("\n");
}
system("pause > nul");
}
Александр Лавринов
Александр Лавринов
89 834
Лучший ответ
n = input()
if len(n) % 2 != 0:
print('1' + '0' * (len(n) - 1) + '1')
else:
new_n = n[0:(len(n) // 2)] + n[0:(len(n) // 2)][::-1]
if int(new_n) > int(n):
print(new_n)
else:
new_n = str(int(n[0:(len(n) // 2)]) + 1) + str(int(n[0:(len(n) // 2)]) + 1)[::-1]
print(new_n)
Дмитрий Вьюгин Простите ваш ответ полностью верный но вот только не могли бы пожалуйста сделать так чтобы если заданное число и так является палиндромом чтобы пичатоло сам N. Спасибо огромное я просто не разбираюсь в питоне ((((
Игорь Оконников какое это программа
с++
Дмитрий Вьюгин Аха бирак доконца истелмеген

n = input()
if len(n) % 2 != 0:
print('1' + '0' * (len(n) - 1) + '1')
else:
new_n = n[0:(len(n) // 2)] + n[0:(len(n) // 2)][::-1]
if int(new_n) == int(n):
print(n)
else:
if int(new_n) > int(n):
print(new_n)
else:
new_n = str(int(n[0:(len(n) // 2)]) + 1) + str(int(n[0:(len(n) // 2)]) + 1)[::-1]
print(new_n)
Алексей Шумилин Если кто хочет пожалуйста пишите мне я буду рад и зачёт благодарности буду скинуть деньги в каспий
Алексей Шумилин Если кто хочет помочь *
Мурад Муцольгов жауаптары керек болса номерлеринди жазып кетиндер
Это ответ не правильный ответ??