一个实数c通过以下过程,可以从任何正实值生成非递减整数序列:

b[1]=c b[n]=floor(b[n-1])*(floor(b[n-1])-b[n] + 1),对n>=2

a[n]=floor(b[n])

例如,c=2.956938891377988...生成斐波那契序列:2, 3, 5, 8, 13, 21, 34, 55, 89, ...

正整数序列的串联是一个实值,表示为将序列a中的元素,第一个放在小数点之前,从第二个位置开始其余的串联在小数点之后:

例如,根据c构造的斐波那契序列可以产生串联值为2.3581321345589...。显然,对于这个c值,c!=t。

求生成的序列开始于的唯一值c,并且生成的序列的串联t等于原始值c。把你的答案四舍五入到小数点后24位。

用浮点数判断, 精度达不到要求.

def find():
 d=1
 low=2
 high=3
 while low<high:
  mid=(high+low)/2
  d=t(mid)-mid
  print(mid,d);
  if d<0:
   high=mid
  else:
   low=mid
  if abs(d)<1e-25:break


def t(r):
 b=[r]
 a=[int(b[0])]
 for i in range(0,16):
  bi=a[i]*(b[i]-a[i]+1)
  ai=int(bi)
  b.append(bi)
  a.append(ai)
 return float('0.'+''.join([str(i) for i in a]))*10

>>>> find()
2.5 -0.16666666666666652
2.25 -0.016666666666666607
...
2.2235610193135544 -4.440892098500626e-16
2.223561019313554 0.0
>>>> t(2.223561019313554)
2.223561019313554