1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 using namespace std;12 const double eps = 1e-8;13 const int INF=0x7fffffff;14 unsigned long long uINF = ~0LL;15 #define MAXN 1000000716 typedef long long LL;17 LL vis[MAXN];18 LL prime[MAXN];19 20 void sieve(LL n)21 {22 LL m=(LL)sqrt(n+0.5);23 memset(vis,0,sizeof(vis));24 for(LL i=2;i<=m;i++)if(!vis[i])25 for(LL j=i*i;j<=n;j+=i)vis[j]=1;26 }27 28 LL gen_prime(LL n)29 {30 sieve(n);31 LL c=0;32 for(LL i=2;i<=n;i++)if(!vis[i])33 prime[c++]=i;34 return c;35 }36 37 LL gcd(LL a,LL b)38 {39 return b==0?a:gcd(b,a%b);40 }41 LL num[11];42 LL ex[11];43 void init()44 {45 num[0]=1;ex[0]=0;46 num[1]=9;ex[1]=1;47 for(int i=2;i<=10;i++)48 {num[i]=num[i-1]*10;49 ex[i]=ex[i-1]*10;}50 51 //for(int i=1;i<11;i++)52 //cout< <<' ';53 }54 55 string Reverse(string str1)56 {57 string str2="";58 for(int i=str1.length()-1;i>=0;i--)59 str2+=str1[i];60 return str2;61 }62 63 int main()64 {65 LL n;66 init();67 while(scanf("%lld",&n),n)68 {69 int i;70 string ans="";71 bool odds;72 LL dig=1;73 for(i=1;i<11;i++)74 {75 if(n>num[i])n-=num[i];76 else {odds=true;break;}77 if(n>num[i])n-=num[i];78 else {odds=false;break;}79 dig*=10;80 }81 n--;n+=dig;82 while(n>0)83 {84 ans+=n%10+'0';85 n/=10;86 }87 ans=Reverse(ans);88 if(odds)ans+=Reverse(ans.substr(0,ans.length()-1));89 else ans+=Reverse(ans);90 cout< <