55 lines
1.2 KiB
C++
55 lines
1.2 KiB
C++
// Digit Queries
|
|
|
|
#include<bits/stdc++.h>
|
|
|
|
using namespace std;
|
|
using ll = long long;
|
|
|
|
|
|
long long int power(ll base, ll exp)
|
|
{
|
|
if (exp == 0)
|
|
return 1;
|
|
else if (exp == 1)
|
|
return base;
|
|
else
|
|
{
|
|
long long int calc;
|
|
if (exp % 2 == 0)
|
|
{
|
|
calc = power(base, exp/2);
|
|
calc *= calc;
|
|
}
|
|
else
|
|
{
|
|
calc = base*power(base, exp-1);
|
|
}
|
|
return calc;
|
|
}
|
|
}
|
|
|
|
|
|
int main() {
|
|
ll q; cin >> q;
|
|
for (ll _{}; _ < q; _++) {
|
|
ll k; cin >> k;
|
|
if (k < 10) {cout << k << endl; continue;}
|
|
ll number_length = 1;
|
|
ll highest_idx = 0;
|
|
while (highest_idx < k) {
|
|
highest_idx += number_length * 9 * power(10, number_length-1);
|
|
number_length++;
|
|
}
|
|
number_length--;
|
|
ll pos = k - highest_idx + number_length * 9 * power(10, number_length - 1) - 1;
|
|
ll number = pos / (number_length);
|
|
number += power(10, number_length - 1);
|
|
// cout << number << " " << number_length << endl;
|
|
|
|
ll decimal_pos = pos % number_length;
|
|
ll out = (number / (power(10, number_length - decimal_pos - 1))) % 10 ;
|
|
cout << out << endl;
|
|
}
|
|
return 0;
|
|
}
|