您的位置:首页 > 产品设计 > UI/UE

POJ 1019 Number Sequence(枚举)

2015-03-31 23:46 495 查看
log10(n)+1可以得到数n的长度

Len
表示1到n这一段的总长度

s
表示第一段到第n段的总长度

先确定第n位在哪段中,然后从1开始枚举确定第n位在哪个数中。设k是这个数最后一位的位置,这个数为num,则第n位的数是num/pow(10,k-n)%10 (掐头去尾)

代码:

//
//  main.cpp
//  1019 Number Sequence
//
//  Created by Baoli1100 on 15/3/31.
//  Copyright (c) 2015年 Baoli1100. All rights reserved.
//

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define LL long long
LL s[50005];
LL Len[50005];

#include <cmath>
int main(){
    Len[1]=1;
    for(int i=2;i<=50000;i++){
        Len[i]=Len[i-1]+log10(i*1.0)+1;
    }
    s[1]=1;
    for(int i=2;i<=50000;i++){
        s[i]=s[i-1]+Len[i];
    }
    LL n;
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%lld",&n);
        int i;
        for(i=1;s[i]<n;i++);
        i--;
        n-=s[i];
        int pos;
        int k=0;
        for(pos=1;n>k;pos++){
            k+=(log10(pos*1.0)+1);
        }
        pos--;
        int res;
        res=pos/(int)pow(10*1.0,(k-n)*1.0);
        res%=10;
        printf("%d\n",res);
        
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: