大数问题的偷懒实现方法 (大数python实现方法)

论坛 期权论坛 脚本     
匿名技术用户   2020-12-30 07:31   33   0

做了一次标题党。

哈哈哈,其实吧...python是没有大数概念的、

或者说,python内置大数 (无限大int)

顺便一提

python真是一种非常好用的语言、不止是做项目,算法比赛也一样 、结合C++灵活运用威力有时大到难以置信(结合C++)

拿这次蓝桥杯第三个填空题来讲、让求出特殊斐波那契数列(第四个项的和等于前三项相加)第20190324项之后四位。

思路很简单、做一个三位的数组a[3]然后在循环里不断让a[0]以及a[1]a[2]依次 = a[0]+a[1]+a[2] ;如果数组初始值就是三个1的话第 20190324/3-1 次循环的a[2]即是答案(因为20190324%3==0)。

C++写一个for很容易就能实现、但是问题在于...第20190324项...太大了,long long可以表示的最大整数为2^63-1、编译器可直接显示的最多位数只有19位、远远不够去显示(其实到30次循环就到24位了...) 虽说直接对1000取余就能拿到最后的4位(正确解法)、但是,有没有办法知道这个数到底是多少呢?

答案是有的

直接用python就行了:

a = [1,1,1]
n=0
while n<6731 :    #这里更改循环次数,顺便那道题要6730107次 等了好久 
 a[0]=a[0]+a[1]+a[2]
 a[1]=a[0]+a[1]+a[2]
 a[2]=a[0]+a[1]+a[2]
 n=n+1 
# print(a)   #测试,确认前面没有因笔误造成逻辑问题
print(a[2])

(特别敬告:请不要尝试过大的数字运算、除非你很闲而且对自己家机子不心疼..)

顺便放一些python3用list模拟数组的常用方法:

#一维数组:

a = [0 for i in range(10)] #相当于a[10]
a = [0] * 10 #同上

a = [1,2,3,4] #有初始值条件下

#二维数组的模拟(a[10][10])
a = [[0 for j in range(10)] for i in range(10)]
a = [[0] for i in range(10)]
for i in range(10):
for j in range(10):
a[i].append(0)

(建议涉及到二维数组还是直接用C++的好...)

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP