洛谷—— P1609 最小回文数

https://www.luogu.org/problemnew/show/1609

题目描述

回文数是从左向右读和从右向左读结果一样的数字串。

例如:121、44 和3是回文数,175和36不是。

对于一个给定的N,请你寻找一个回文数P,满足P>N。

满足这样条件的回文数很多,你的任务是输出其中最小的一个。

输入输出格式

输入格式:

1行,一个正整数N。N的数值小于10^100,并且N没有前导0。

输出格式:

你的程序应该输出一行,最小的回文数P(P>N)。

输入输出样例

输入样例#1: 复制
44
输出样例#1: 复制
55

说明

50%的数据,N<10^9

100%的数据,N<10^100

 1 #include <iostream>
 2 #include <cstring>
 3 #include <string>
 4 
 5 using namespace std;
 6 
 7 string tmp,s;
 8 int n;
 9 
10 int Presist()
11 {
12     cin>>s;
13     tmp=s;    n=s.length();
14     for(int i=0; i<n>>1; ++i)
15         s[n-i-1]=s[i];
16     if(s>tmp) { cout<<s; return 0; }
17     for(int i=(n-1)>>1; i>=0; --i)
18         if(s[i]=='9') s[i]='0';
19         else { s[i]++; break; }
20     for(int i=0; i<n>>1; ++i)
21         s[n-i-1]=s[i];
22     if(s[0]=='0') s[0]='1',s+='1';
23     cout<<s;
24     return 0;
25 }
26 
27 int Aptal=Presist();
28 int main(int argc,char**argv){;}          
原文地址:https://www.cnblogs.com/Shy-key/p/7905713.html