YCOJ 1041113【最近的回文数】
描述
输入一个 整数,找到与它的差的绝对值最小的回文数。当有两个解时,取较小的那一个解。
输入输出格式
输入
输入为一行,包括一个整数 N,整数 N 的长度在 1 到 1000 之间(含 1000)。
输出
输出只有一个整数,为与输入数字的差的绝对值最小的回文数。
输入输出样例
输入样例 1
10000
输出样例 1
999
输入样例 2
1269421
输出样例 2
1269621
解题思路
.......就是找多种规律,剩下的都在代码中,加油理解吧!!!
题解
1 #include<bits/stdc++.h>//'惦念'. 2 using namespace std; 3 bool jk=true; 4 int main() 5 { 6 string N,M; 7 cin>>N; 8 if(N.size()==1){cout<<N;return 0;//一位数直接输出 9 } 10 for(int i=1;i<N.size();i++) 11 { 12 if(N[i]!='0') 13 { 14 jk=false; 15 break; 16 } 17 } 18 if(jk)//只要有0的话一般都是99....最近 19 { 20 for(int i=1;i<N.size();i++) 21 cout<<9; 22 return 0; 23 } 24 if(N.size()%2==0)//直接倒着来 25 { 26 M=N.substr(0,N.size()/2); 27 cout<<M; 28 reverse(M.begin(),M.end()); 29 cout<<M; 30 } 31 else 32 { 33 M=N.substr(0,N.size()/2+1);//处理一下 34 cout<<M; 35 reverse(M.begin(),M.end()); 36 for(int i=1;i<M.size();i++) 37 cout<<M[i]; 38 } 39 return 0; 40 }