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 |
我觉得我写的肯定是这题最傻叉的代码。。。神牛门喷我吧。。。代码亮出#include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> using namespace std; __int64 a[32010],sum[32010],n,num,k,ans; int main() { n=32000; for(int i=1;i<=n;i++) { if(i<10) a[i]=a[i-1]+1; else if(i<100) a[i]=a[i-1]+2; else if(i<1000) a[i]=a[i-1]+3; else if(i<10000) a[i]=a[i-1]+4; else if(i<100000) a[i]=a[i-1]+5; else if(i<1000000) a[i]=a[i-1]+6; } for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i]; //for(int i=1;i<=10;i++) cout<<sum[i]<<endl; int tt; scanf("%d",&tt); while(tt--) { scanf("%I64d",&k); for(int i=1;;i++) { if(k<=sum[i]) {num=i-1;break;} } //cout<<num<<endl; __int64 tmp=sum[num]; for(int i=1;;i++) { if(i<10) tmp+=1; else if(i<100) tmp+=2; else if(i<1000) tmp+=3; else if(i<10000) tmp+=4; else if(i<100000) tmp+=5; if(tmp>k) { num=i; break; } } //cout<<num<<endl; if(num<10) { ans=num-1; } else if(num<100) { tmp-=2; if(k-tmp==0) ans=(num-1)%10; else if(k-tmp==1) ans=num/10; } else if(num<1000) { tmp-=3; if(k-tmp==0) ans=(num-1)%10; else if(k-tmp==1) ans=num/100; else if(k-tmp==2) ans=(num/10)%10; } else if(num<10000) { tmp-=4; if(k-tmp==0) ans=(num-1)%10; else if(k-tmp==1) ans=num/1000; else if(k-tmp==2) ans=(num/100)%10; else if(k-tmp==3) ans=(num/10)%10; } else if(num<100000) { tmp-=5; if(k-tmp==0) ans=(num-1)%10; else if(k-tmp==1) ans=num/10000; else if(k-tmp==2) ans=(num/1000)%10; else if(k-tmp==3) ans=(num/100)%10; else if(k-tmp==4) ans=(num/10)%10; } cout<<ans<<endl; } 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