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 }
原文地址:https://www.cnblogs.com/hualian/p/11159941.html