这道题之前在力扣上练习过,大致思路记得,具体程序得自己再编辑一遍。于是,开始寻找规律,位数weishu 区间数字的个数period 以及 每长一位的起点start(1 10 100这种)

weishu=1 start=1 period=9(记得从9 99 999 开始,不要从10 100开始,否则容易绕晕)

while(n>period)
        {
            n-=period;
            weishu++;
            start=start*10;    //对应 1 10 100
            period=9*start*weishu;   //对应这一区间的数字个数
        }

之后确定数字是哪一个:

res=start+(n-1)/weishu

找到对应的字母:

string str_res=to_string(res);
char ch=str_res[(n-1)%weishu];
return ch-'0';

这里有一个特别要注意的点:long数据类型,因为总是卡在10000000这个测试点,原来一直是int 失败了很多次,搜索了一下发现提示需要使用long数据类型!!!