题目背景
方方方很喜欢回文数,于是就有了一道关于回文数的题目。
题目描述
求从小到大第n(1<=n<=10^18)个回文数。
注释:出题人认为回文数不包括0。
输入输出格式
输入格式:
一行一个正整数n。
输出格式:
第n个回文数。
输入输出样例
输入样例#1:
2333
输出样例#1:
1334331
输入样例#2:
12345678987654321
输出样例#2:
23456789876543222234567898765432
说明
对于50%的数据,n<=3000。
对于100%的数据,1<=n<=10^18。..
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; char s[20]; int num[40],ans,bns; int main(){ //freopen("hws.in","r",stdin); //freopen("hws.out","w",stdout); scanf("%s",s); int len=strlen(s); for(int i=len-1;i>=0;i--){ num[i+1]=s[i]-'0'+num[i+2]/10; num[i+2]%=10; if(i==0) num[i+1]-=1; if(i==strlen(s)-1) num[i+1]+=1; } for(int i=1;i<=len;i++){ if(num[i]==0&&i==1){ ans=1; continue; } else if(num[i]==0&&i==2&&ans) bns=1,cout<<"9"; else cout<<num[i]; } if(ans==1&&bns!=1) len=len; else len-=1; for(int i=len;i>=1;i--){ if(num[i]==0&&i==1) continue; else if(num[i]==0&&i==2&&ans) cout<<"9"; else cout<<num[i]; } }