回文數(shù)是從前往后和從后往前得到的數(shù)是相同的。給你一個(gè)正整數(shù)N,你需要找到比N大的回文數(shù)P,而且這個(gè)回文數(shù)是其中最小的那一個(gè)。
包含多組測(cè)試數(shù)據(jù)。每組測(cè)試數(shù)據(jù)占一行,包括一個(gè)正整數(shù)N。N的位數(shù)不超過10000位。
每組測(cè)試數(shù)據(jù)輸出占一行,輸出滿足條件的P。
443175Sample Output
554181分析:開始想著在原基礎(chǔ)上一直加1,直到找到某個(gè)數(shù)為回文,結(jié)果超時(shí)了……我天= =后來才知道要構(gòu)造回文數(shù)。參考代碼:#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;}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注