题目大意
题目传送门
求数字11212312341234512345612345671234567812345678912345678910123456789101112345678910111212345678910111213…的第i位是几?
思路分析
首先显然这个数列是有规律的,对于前组数据,分别为1,12,123,1234一个比前一个多一位,大于9,后一个比前一个多两位,大于99多三位,于是我们先打表看看到2147483647需要多少组数据,(显然我们不能把整个数列处理了,所以分组是一个不错的选择)
用n[i]
表示
for (int i = 1; i < MAX; i++) {
//这一位是几位数
if (i > 9999)b = 5;//超过四位每次比前一组多5位
else if (i > 999)b = 4;
else if (i > 99)b = 3;
else if (i > 9)b = 2;
else b = 1;
n[i] = n[i - 1] + b;
sn[i] = sn[i - 1] + n[i];
}
可以看到第40000组不到就已经超过3000000000多位了(其实32000就够了),完全是够用了。