总时间限制: 1000ms 内存限制: 65536kB
描述
给定一个正整数 i。编写一个程序来查找位于数字组 S1S2 序列中位置 i 的数字Sk.每个组 Sk 由一系列从 1 到 k 的正整数组成,一个接一个地写出来。
例如,序列的前 80 位数字如下所示:
11212312341234512345612345671234567812345678912345678910123456789101112345678910
输入
输入文件的第一行包含一个整数 t (1 ≤ t ≤ 10),即测试用例的数量,后跟每个测试用例的一行。测试用例的行包含单个整数 i
(1 ≤ i ≤ 2147483647)
输出
每个测试用例应有一行输出,其中包含位于位置 i 的数字。
样例输入
2
8
3
样例输出
2
2
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long n;
cin >> n;
vector<char> a;
char seek(long long x);
while (n--)
{
int x;
cin >> x;
a.push_back(seek(x));
}
for (int i = 0; i < a.size(); i++)
{
cout << a[i] << endl;
}
return 0;
}
char seek(long long x)
{
long long count = 0;
string num;
string str;
for (int i = 1;; i++)
{
if (i == 1)
{
num = to_string(i);
str = to_string(i);
count += str.length();
}
if (i > 1)
{
str = to_string(i);
num = num + str;
count += str.length();
}
if (x > count)
{
x -= count;
}
else
{
return num[x - 1];
break;
}
}
}
