题目链接:
题目大意:
Sk表示123...k
把S1S2S3...Sk排成一行 比如:112123123412345123456....
求第i个数字是多少。
解题思路:
如果Sk表示123...k所占的位数,显然Sk=Sk-1+Cal(k)。Cal(k)表示k的位数。
先打表预处理sum[i]=S1+S2+..+Si;
然后在sum[i]中查找第n个属于哪一个Sk.
在同一个Sk中,一位有1~9 9个,2位有10~99 90个 3位有100~999 900个。。。所以可以先找到属于该Sk中的第几位的数。
找到位数后,就可以算出属于该位的第几个数了 比如四位的第一个数1000,第二个数为1001,,,
找到该位数的第几个后,再找属于该数的第几位,比如1234的第二位是2.
代码:
#include #include #include #include #include #include #include #include #include