已知小数0.1234567891011121314...是一个由连续自然数拼接组成的无限不循环小数,问小数点后面出现的第一个2019中的2是小数点后面第几位?
时间: 2023-06-15 09:07:07 浏览: 329
首先我们观察小数中连续自然数的拼接部分,可以发现:
- 从1到9,共有9个数字,每个数字占1位,共占9位;
- 从10到99,共有90个数字,每个数字占2位,共占180位;
- 从100到999,共有900个数字,每个数字占3位,共占2700位;
- 从1000到9999,共有9000个数字,每个数字占4位,共占36000位;
依此类推,设第n个自然数为k,则它占用的位数为$len(k)$。为了方便计算,我们可以把自然数拆成个位数、十位数、百位数等等,例如:
- 自然数1拆成1个位数;
- 自然数10拆成1个位数和1个十位数;
- 自然数100拆成1个个位数、1个十位数和1个百位数;
- 自然数1000拆成1个个位数、1个十位数、1个百位数和1个千位数;
这样,对于任意的自然数k,它的位数可以表示为:
$$len(k)=\lfloor\log_{10}k\rfloor+1$$
其中$\lfloor x\rfloor$表示不大于x的最大整数。例如,$\lfloor\log_{10}1234\rfloor+1=4$,因为1234有4位数。
现在我们要找到小数点后面出现的第一个2019中的2,也就是找到小数中第一个连续的2019个数字,使得其中恰好有2个2。为了方便计算,我们可以按照自然数的位数来分段计算。具体地,我们从小到大依次考虑位数为1、2、3、4......的自然数所占用的位数。假设当前正在考虑位数为m的自然数,已经找到了小数中前面的所有连续数字,现在要找到下一个连续数字,使得其中恰好有2个2。
- 如果m=1,则当前自然数的位数为1,它只占用1位数字,因此我们只需要看小数中下一个数字是否为2即可;
- 如果m>1,则当前自然数的位数为m,它占用的位数为$9\times 1+90\times 2+900\times 3+...+9\times 10^{m-2}\times(m-1)$,可以用等比数列求和公式计算。例如,当m=2时,当前自然数的位数为2,它占用的位数为$9\times 1=9$;当m=3时,当前自然数的位数为3,它占用的位数为$9\times 1+90\times 2=189$。我们从小数中当前位置开始,依次取出这些位数,然后把它们拼接起来,得到当前自然数的值。例如,当m=2时,当前自然数的值为10;当m=3时,当前自然数的值为100。然后我们判断当前自然数中有多少个2,如果有2个2,则找到了下一个连续数字,否则继续向后找。
按照上面的方法,我们可以在小数中依次找到第一个连续的2019个数字,使得其中恰好有2个2。最终的结果是小数点后第194982位。
阅读全文