首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中处理非常大的数字

在Python中处理非常大的数字
EN

Stack Overflow用户
提问于 2009-02-11 20:13:46
回答 3查看 355.3K关注 0票数 164

我一直在考虑在Python中快速评估扑克牌手势。我想到了一种加速这个过程的方法,那就是将所有的牌面和花色表示为质数,然后将它们相乘来表示手牌。说白了:

代码语言:javascript
复制
class PokerCard:
    faces = '23456789TJQKA'
    suits = 'cdhs'
    facePrimes = [11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 53, 59, 61]
    suitPrimes = [2, 3, 5, 7]

代码语言:javascript
复制
    def HashVal(self):
      return PokerCard.facePrimes[self.cardFace] * PokerCard.suitPrimes[self.cardSuit]

这将给每一只手一个数值,通过模可以告诉我手中有多少国王或有多少颗心。例如,任何手中有五个或更多梅花的牌将被2^5平均除以;任何手中有四个国王的牌将被59^4平均除,以此类推。

问题是,像AcAdAhAsKdKhKs这样的七张牌的散列值大约为62.7千万亿,这将花费远远超过32位的内部表示。有没有办法在Python中存储这么大的数字,这样我就可以对它进行算术运算了?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-02-11 20:19:45

Python支持"bignum“整数类型,可以处理任意大的数字。在Python 2.5+中,此类型称为long,独立于int类型,但解释器将自动使用更合适的类型。在Python 3.0+中,int类型已被完全删除。

这只是一个实现细节--只要你使用的是2.5或更高版本,只需执行标准的数学运算,任何超过32位数学边界的数字都会自动(并透明地)转换为一个bignum。

你可以在PEP 0237中找到所有血淋淋的细节。

票数 213
EN

Stack Overflow用户

发布于 2009-02-11 20:18:04

python自然支持任意大整数:

代码语言:javascript
复制
In [1]: 59**3*61**4*2*3*5*7*3*5*7
Out[1]: 62702371781194950
In [2]: _ % 61**4
Out[2]: 0
票数 30
EN

Stack Overflow用户

发布于 2019-11-12 07:36:10

python解释器将为您处理它,您只需执行您的操作(+,-,*,/),它将照常工作。

int值是无限制的。

做除法时要小心,默认情况下商会变成float,但float不支持这么大的数。如果你收到一条错误消息,说float不支持这么大的数字,那么这意味着商太大了,无法存储在float中,你必须使用地板除法(//)。

它忽略小数点后的任何小数,这样,结果将是int,所以您可以有一个大的数字结果。

代码语言:javascript
复制
>>>10//3
3

>>>10//4
2
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/538551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档