Problem Description
假设:
S1 = 1 S2 = 12 S3 = 123 S4 = 1234 ......... S9 = 123456789 S10 = 1234567891 S11 = 12345678912 ............ S18 = 123456789123456789 .................. 现在我们把所有的串连接起来 S = 1121231234.......123456789123456789112345678912......... 那么你能告诉我在S串中的第N个数字是多少吗? |
Input
输入首先是一个数字K,代表有K次询问。
接下来的K行每行有一个整数N(1 <= N < 2^31)。 |
Output
对于每个N,输出S中第N个对应的数字.
|
Sample Input
6 1 2 3 4 5 10 |
Sample Output
1 1 2 1 2 4 |
Author
8600
|
Source
HDU 2007-Spring Programming Contest - Warm Up (1)
|
Recommend
8600
|
一开始想的是运用一个数组,用来存放位数,a[1]=1,a[2]=3...然后用二分查找位于哪两个数区间,然后减去前一个在对差值%9,但仔细分析和后发现,不需要如此,只要while语句,一层层减去,直到最后一个整体,然后求余9,注意求余若为0,则应该置为9!
代码:#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <string>
#include <map>
#include <stack>
#include <vector>
#include <set>
#include <queue>
#include <iomanip>
#define maxn 15
#define mod 1000000007
#define INF 1000000
#define exp 1e-8
#define pi acos(-1.0)
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int t;
int n;
cin>>t;
while (t--)
{
cin>>n;
int a = 1;
while ( n > a )
{
n -= a;
a++;
}
n%=9;
if(n==0) n=9;
cout<<n<<endl;
}
return 0;
}