1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| 斐波那契字
对于任意两个数字串A和B,我们定义FA,B为序列(A,B,AB,BAB,ABBAB,…),其中每一项都是拼接前两项而成。
进一步的,取FA,B中首次包含至少n个数字的项,记其第n个数字为DA,B(n)。
举例如下:
取A=1415926535,B=8979323846。我们希望找出DA,B(35)。
FA,B的前几项分别是: 1415926535 8979323846 14159265358979323846 897932384614159265358979323846 1415926535897932384689793238461415*9*265358979323846
因此DA,B(35)是第五项的第35个数字,也就是9。
现在我们取A是圆周率π小数点后的100位数字:
14159265358979323846264338327950288419716939937510 58209749445923078164062862089986280348253421170679
B是接下来的再100位数字:
82148086513282306647093844609550582231725359408128 48111745028410270193852110555964462294895493038196 .
求∑_{n = 0,1,…,17} 10^{n}× D_{A,B}((127+19n)×7^{n})。
我的思路:首先计算这个斐波那契数列每个数字的长度. 然后设计函数f(num,pos)代表数列第num项的第pos个数字,判断如果在前部则f(num-2,pos),如果在后部则f(num-1,pos-len[num-2]),如果落到游戏初始存储AB的数字则直接返回.
请给我c++代码,可以用string存储,不用真的计算这么大的数字.
|