首页 > 学院 > 开发设计 > 正文

1002回文数

2019-11-08 02:48:21
字体:
来源:转载
供稿:网友

Description

回文数是从前往后和从后往前得到的数是相同的。给你一个正整数N,你需要找到比N大的回文数P,而且这个回文数是其中最小的那一个。

Input

包含多组测试数据。每组测试数据占一行,包括一个正整数N。N的位数不超过10000位。

Output

每组测试数据输出占一行,输出满足条件的P。

Sample Input 

443175

Sample 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;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表