POJ 1019 Number Sequence

一道找規律的數學題。


#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<ctime>
#include<bitset>
#define LL long long
#define db double
#define EPS 1e-15
#define inf 1e10

using namespace std;

const int size=31269;
unsigned a[size];
unsigned s[size];
void table(){
    a[1]=s[1]=1;
    for (int i=2;i<size;i++){
        a[i]=a[i-1]+(int)log10((double)i)+1;
        s[i]=s[i-1]+a[i];
    }
}
int calc(int n){
    int i=1;
    while (s[i]<n) i++;
    int pos=n-s[i-1];
    int len=0;
    for (i=1;len<pos;i++) 
        len+=(int)log10((double)i)+1;
    return (i-1)/(int)pow((double)10,len-pos)%10;
}
int main(){
    table();
    int test;
    scanf("%d",&test);
    while (test--){
        int n;
        scanf("%d",&n);
        printf("%d\n",calc(n));
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章