poj1019 Number Squence

来源:互联网 发布:阿里妈妈淘宝联盟佣金 编辑:程序博客网 时间:2024/06/05 10:42
题意:
一直一个有序数组,给定一个数字n代表已知数组的第n个数,求该书是几。
分析:
1,根据数组规律对其分组:1 12 123 1234 12345......
2,首先求n在第几组中,再求n在其分组的第几个数中同时我们也可求得是该书的第几位。
3,我们分得的数组中数字依次变大,位数越来越多,但我们是要按照每一个数字来计算位置信息。比如:123(一百二十三)是三个数,所                以们就用到log10求得其位数。
#include<iostream>#include<cmath>using namespace std;#define size 31269unsigned a[size],s[size];void play_table(){int i;a[1]=s[1]=1;for(i=2;i<size;i++){a[i]=a[i-1]+(int)log10((double)i)+1;//a[i]是第i组最大数的位数。s[i]=s[i-1]+a[i];//s[i]是第i组的长度。}}int main(){play_table();int t,n,i,pos,len;cin>>t;while(t--){i=1;len=0;cin>>n;while(n>s[i]){    i++;}//求的n在第几组中。pos=n-s[i-1];//n在其所在组中的位置。for(i=1;len<pos;i++)len+=(int)log10((double)i)+1;//求得n在第几个数的第几位。cout<<(i-1)/(int)pow((double)10,len-pos)<<endl;}return 0;}