回文数是从前往后和从后往前得到的数是相同的。给你一个正整数N,你需要找到比N大的回文数P,而且这个回文数是其中最小的那一个。
包含多组测试数据。每组测试数据占一行,包括一个正整数N。N的位数不超过10000位。
每组测试数据输出占一行,输出满足条件的P。
443175Sample Output
554181分析:开始想着在原基础上一直加1,直到找到某个数为回文,结果超时了……我天= =后来才知道要构造回文数。参考代码:#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<string>#include<algorithm>#include<stack>#include<queue>#include<vector>#include<map> using namespace std;const int maxn = 10000+10;char s[maxn]; int main(){ while( ~scanf("%s",s)) { int len = strlen(s)-1; int m = (len+1)/2; int tmp = 0; for( int i = m-1; i >= 0 && !tmp; i--) { if( s[i] > s[len-i]) tmp = 1; else if( s[i] < s[len-i]) tmp = -1; } if( tmp <= 0) { s[len/2]++; for( int i = len/2; i && s[i] > '9'; i--) { s[i] = '0'; s[i-1]++; } if( s[0] > '9') { s[0] = '1'; len++; m = (len+1)/2; s[m] = '0'; } } for( int i = 0; i < m; i++) PRintf("%c",s[i]); for( int i = m-(len&1); i >= 0; i--) printf("%c",s[i]); printf("/n"); } return 0;}
新闻热点
疑难解答