题目链接
长度为2*i+1和2*(i+1)的数的个数都为9*10^i,由此可知N的长度和N为该长度的第几个数。
附上AC代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<queue>
#include<set>
#include<vector>
#include<map>
#include<string>
#include<cmath>
#define pq priority_queue
#define Pi acos(-1.0)
#define MAXX 1000000007
using namespace std;
long long ans[30],num[30];
int s[20];
void ok(int x,int y)
{
y+=num[x];
int l=-1;
while(y)
{
s[++l]=y%10;
y/=10;
}
for(int i=0;i<x;i++)
{
if(i*2<x)
cout<<s[l-i];
else
cout<<s[i-x/2];
}
cout<<endl;
}
int main()
{
ans[1]=9;
num[1]=0;
for(int i=2;i<=20;i++)
{
if(i%2==0)
{
ans[i]=ans[i-1];
num[i]=num[i-1];
}
else
{
ans[i]=ans[i-1]*10;
num[i]=num[i-1]*10+9;
}
}
int now,n;
while(scanf("%d",&n),n)
{
now=1;
while(n>ans[now])
{
n-=ans[now];
now++;
}
ok(now,n);
}
return 0;
}
Memory: 0 KB Time: 3 MS
Language: C++ 4.8.2 Result: Accepted