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 (掐头去尾)
代码:
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; }
相关文章推荐
- poj 1019 Number Sequence
- POJ_1019_Number Sequence_二分搜索
- poj 1019 Number Sequence
- poj1019 Number Sequence
- POJ 1019 Number Sequence
- poj 1019 Number Sequence 【组合数学+数字x的位宽函数】
- poj1019——Number Sequence(数学)
- [POJ 1019]Number Sequence(递推)
- POJ 1019 Number Sequence (规律题)
- POJ 1019 Number Sequence
- 排列组合:poj 1019 Number Sequence
- Number Sequence(POJ--1019
- poj 1019 Number Sequence
- POJ 1019 Number Sequence(DP?)
- POJ 1019 Number Sequence
- POJ 1019 Number Sequence【数论】
- 【POJ 1019】 Number Sequence
- POJ 1019:Number Sequence
- POJ-1019 Number Sequence(思维题)
- POJ 1019 Number Sequence