你说的同事...
[img]https://img.nga.178.com/attachments/mon_202103/25/-7Q16t-7u37K12ToS27-27.gif.medium.jpg[/img]
把第1亿个数循环除以10,如果商不为0则计数+1
比如 256 除以10是25,再除以10是2,再除以10是0,所以一共有三位
这么和你说吧,一亿个字,100字一行100行的纸,得打印10000页
[img]https://img.nga.178.com/attachments/mon_202103/25/-7Q16t-e7p6K1rT1kSfz-sg.jpg.medium.jpg[/img]
知之为知之,不知百度之,这种大数推导一般都会有通项公式,要不算哭你
第一亿项可以用式子直接算出来,不过因为数字很大应该需要分割存储,最后计位。
[quote][pid=502879252,26050325,1]Reply[/pid] Post by [uid=60762430]scp4396[/uid] (2021-03-25 13:05):
这么和你说吧,一亿个字,100字一行100行的纸,得打印10000页[/quote][s:ac:哭笑]又没说print这个数字
足够大之后直接除以黄金分割率的相关次方
计算位数的话不要除了,取对数然后加减就行了
当然这个还是不够准
楼上都是认真的吗[s:ac:汗]
循环到第1000个数不就行了
然后len(str(x))长度就出来了
counter = 0
while counter <= 999999999999:
if counter 是斐波那契数
print
我真是天才[img]http://img.nga.178.com/attachments/mon_201209/14/-47218_5052bc7a0ee49.png[/img]
列出通项公式,算一算就好了。
以(xn, xn+1)作为向量,以矩阵乘法的形式写出它的下一项,求出变换矩阵的特征向量与特征值,通项公式就成了特征向量的n次幂之和
[quote][pid=502881300,26050325,1]Reply[/pid] Post by [uid=61654404]梦里清猿[/uid] (2021-03-25 13:14):
楼上都是认真的吗[s:ac:汗]
循环到第1000个数不就行了
然后len(str(x))长度就出来了[/quote]直接递归时间复杂度很高,算到1000很慢。过程中把前面算过的数值记录到数组就好了,简单的空间换时间
[quote][pid=502883663,26050325,1]Reply[/pid] Post by [uid=60066786]风成忆[/uid] (2021-03-25 13:24):
直接递归时间复杂度很高,算到1000很慢。过程中把前面算过的数值记录到数组就好了,简单的空间换时间[/quote]a1=1
a2=1
a3=a1+a2
a1000=a999+a998
你管这叫递归?
反复调用函数,逆向求解才是递归
正向叫递推
这个问题涉及尾递归优化,python的创始人是知名的尾递归优化反对者,用传统递归算法直接算多半要stack over flow。这应该是个数学题。
刚查了下,python最大递归深度差不多正好不够1000,所以要么提升最大递归深度,要么用迭代算法代替递归算法,或者直接数学算法用通项式取对数。
1 1 2 3 5 8
x=0
y=1
c=1
loop
f=x+y
x=f
y=y+x
c=c+1
if c<1000 go loop else print len(str(f))