python的大数实现方法

本文共有1314个字,关键词:

好了标题党自首
其实python大数实现方法本身是个伪命题、
或者说,其实因为python内置大数 (无限大int),所以根本不需要一个来介绍python大数如何使用的帖子

顺便一提
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位(正确解法)、但是,有没有办法知道这个数到底是多少呢?

答案是有的
可以用C++大数模板、用Java大数的方法... 也或者...

直接用python就行了 :

a = [1,1,1]
n=0
while n<6731 :    #这里更改循环次数,顺便真的要算出那道题的话时间要非常的长
 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] #有初始值条件下

二维数组的模拟(a10)

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++更好...)

72390343_p0.jpg

版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意还请不要擅自转载。
 typecho文章置顶 没有了 
添加新评论
暂无评论
Title - Artist
0:00