poj1019--Number Sequence题解

该问题很简单,我们分三步完成

1.首先找到i在哪个小的连续的子整数序列当中。

2.然后找到i在该子序列的第几个数中。

3.最后确定i位于该自然数的第几位。

#include<iostream> using namespace std; int GetNumber(int pos) { int i = 1,j,sum = 0; while(1) { if(i>=100000) sum += 6; else if(i>=10000) sum += 5; else if(i>=1000) sum += 4; else if(i>=100) sum += 3; else if(i>=10) sum += 2; else sum += 1; if(pos>sum) { pos -= sum; i++; } else break; } int len = 1; for(j=1;j<=i;j++) { if(j>=100000) len = 6; else if(j>=10000) len = 5; else if(j>=1000) len = 4; else if(j>=100) len = 3; else if(j>=10) len = 2; else len = 1; if(pos>len) pos -= len; else break; } for(int k=0;k<len-pos;k++) { j /= 10; } j %= 10; return j; } int main() { int testNum,pos; cin>>testNum; int *number = new int[testNum]; for(int i=0;i<testNum;i++) { cin>>pos; number[i] = GetNumber(pos); } for(int i=0;i<testNum;i++) { cout<<number[i]<<endl; } return 0; }

你可能感兴趣的:(poj1019--Number Sequence题解)