超长数字串
【问题描述】
给一个数字串 STR:123456789101112131415161718192021222324......它是由所有自然数从小到大依次排列起来的。任意给一个数字串 T,容易知道它一定在 STR 中出现无穷多次。现要求任意给一个数字 n 作为串 T,并按上述规则将从
1~n 的所有数字连续串在一起组成一个完整的串 S。求出串 T 在串 S 中所有出现
的位置。
例如,若 n=81,则从 1 到 81 的所有自然数连在一起构成串 S,而“81”首
次出现的位置为 27.你的任务是找出此串中“81”出现的所有位置和出现次数。最后给出一份列表,列出 n 从 1 到 100 时,所有字符串值为 n 的出现首位置和次数。
【基本要求】
1.输入 n 值后首先计算出串 S 的长度 L,计算公式的理论推导自行完成
(1<n<1000)。
2.串 S 的存储采用动态内存分配方式,并且要求将串指针和串长变量封装在一起(用结构体)。
3.程序要求实现两个功能(可通过按键选择实现):
其一为能够接受从键盘上输入的 n 值,并以此为依据生成串 S,然后输出串值为 n 的子串在 S 中出现的所有位置和次数。
其二为通过循环计算出 n 从 1 到 100 时,所有字符串值为 n 的出现首位置和次数,并将结果存储在一个文本文件中。
【输入输出】
对于第一个功能,输入输出形式为:输入数据:输入数值 n:12
输出数据:在从 1 到 12 所构成的串中,12 出现的位置分别是:1,14.共
出现 2 次。
对于第二个功能,输出形式为:
n 出现首位置出现次数
111
221
............
21152