求数列上的第k位个数字,如下图所示

有没有人可以用c/c++帮忙解答一下?
1位数的数有9个,2位数的有90个,这样累加,找出长度所在范围,然后精细求数.
运行结果:

代码:
#include <iostream>
using namespace std;
int main()
{
int ws = 1;
long long k, s = 0;
long long start = 10;
long long t = 90;
cin >> k;
if (k <= 9)
{
cout << k;
return 0;
}
else
{
s = 9; //1位数有9个
ws = 2;
while (1)
{
if (s + t * ws >= k)
break;
else
{
s = s + t * ws;
ws++;
t *= 10; //2位数字的个数是90个,3位数字的个数是900,以此类推
start *= 10;
}
}
if (s + t * ws == k)
{
cout << 9;
return 0;
}
for (; ; start++)
{
s = s + ws;
if (s >= k)
break;
}
if (s == k)
cout << (start % 10);
else
{
long long p = s - k;
while (p--)
start /= 10;
cout << (start % 10);
}
}
return 0;
}