Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
我用纯模拟过的。。。新手。。别BS我。。#include "stdio.h" #include "stdlib.h" #include "string.h" __int64 digits[70001],sum[70001]; long a[7]={0,0,9,189,2889,38889,488889}; long b[6]={0,9,99,999,9999,99999}; int main() { __int64 i,N,flag,dig,ans,temp,k,num; memset(digits,0,sizeof(digits)); memset(sum,0,sizeof(sum)); for(i=1;i<=70000;i++) { digits[i]=digits[i-1]+1; if(i>=10) digits[i]++; if(i>=100) digits[i]++; if(i>=1000) digits[i]++; if(i>=10000) digits[i]++; } for(i=1;i<=70000;i++) sum[i]=sum[i-1]+digits[i]; scanf("%I64d",&N); for(k=1;k<=N;k++) { scanf("%I64d",&num); if(num==1) { printf("1\n"); continue; } for(i=1;i<=70000;i++) if(num>sum[i]&&num<=sum[i+1]) { flag=i; break; } temp=num-sum[flag]; for(i=0;i<=6;i++) if(temp>a[i]&&temp<=a[i+1]) { dig=i; temp=temp-a[i]; break; } num=(temp-1)/dig+1+b[dig-1]; temp=(temp-1)%dig+1; ans=1; if(dig>temp) for(i=1;i<=dig-temp;i++) ans*=10; num=(num/ans)%10; printf("%I64d\n",num); } system("pause"); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator