URAL 1123. Salary 回文数

来源:互联网 发布:string转化为byte数组 编辑:程序博客网 时间:2024/05/29 18:01

          比赛的时候没怎么读懂题目,其实就是找>=给出的数的回文数。设原先的月薪为a,回文月薪b,先让a的前半部分等于b,再对称着补全b的后半部分,然后判断这时候b比a大,直接输出,否则把b的前半部分加1,再对称着找出后半部分。输出即可。


#include<iostream>#include<cstring>#include<cstdio>#include<cstdlib>#define MAXN 2010using namespace std;int main(){    //freopen("in.txt",'r',stdin);    char original[MAXN],s[MAXN];    cin>>original;    int len=strlen(original);    int l=0,r=len-1;    for(int i=0; i<=(len-1)/2; i++,l++,r--)    {        s[r]=original[i];        s[l]=s[r];    }    s[len]='\0';    if(strcmp(s,original)>=0)    {        cout<<s<<endl;        return 0;    }    r=(len-1)/2;    s[r] ++;    int flag=0;    while(s[r]>'9'&&r>=0)    {        s[r]='0';        s[r-1]++;        r--;    }    if(s[0]>'9')    {        s[0]='0';        flag=1;        cout<<'1';    }    int j,i;    for( i=(len-1)/2,j=len/2; i>=0; i--,j++)        s[j]=s[i];    if(flag)        s[j++]='1';    s[j]='\0';    cout<<s<<endl;    return 0;}