我一直在考虑用Python进行快速扑克手牌评估.在我看来,加速这个过程的一种方法是将所有卡面和套装表示为素数,并将它们相乘以代表手.白衣:
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]
Run Code Online (Sandbox Code Playgroud)
和
def HashVal(self):
return PokerCard.facePrimes[self.cardFace] * PokerCard.suitPrimes[self.cardSuit]
Run Code Online (Sandbox Code Playgroud)
这会给每只手一个数值,通过模数可以告诉我手中有多少国王或多少颗心.例如,任何有五个或更多球杆的手将平均分为2 ^ 5; 任何有四个国王的手都会平均分为59 ^ 4等.
问题在于,像AcAdAhAsKdKhKs这样的七张牌的手的哈希值大约为62.7千万亿,内部代表需要大于32位.有没有办法在Python中存储这么大的数字,这将允许我对它进行算术运算?
我想在C++中实现一个大的int类作为编程练习 - 一个可以处理大于long int的数字的类.我知道已经有几个开源实现,但我想写自己的.我试图了解正确的方法是什么.
我知道一般策略是将数字作为字符串,然后将其分解为较小的数字(例如,单个数字),并将它们放在一个数组中.此时,实现各种比较运算符应该相对简单.我主要担心的是如何实现添加和乘法等功能.
我正在寻找一种通用的方法和建议,而不是实际的工作代码.
目前我正在借用java.math.BigInteger这里描述的J#库.从来没有使用过库来处理大整数,这看起来很慢,大约慢了10倍,即使对于ulong长度数也是如此.有没有人有更好的(最好是免费的)库,或者这种性能水平是否正常?
我试图来计算1 + 1 * 2 + 1 * 2 * 3 + 1 * 2 * 3 * 4 + ... + 1 * 2 * ... * n,其中n是用户输入.它适用于中值n高达12.我要计算总和n = 13,n = 14和n = 15.我如何在C89中做到这一点?据我所知,我unsigned long long int只能在C99或C11中使用.
我的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned long int n;
unsigned long int P = 1;
int i;
unsigned long int sum = …Run Code Online (Sandbox Code Playgroud) 在Swift中是否有与Java的BigInteger类相同的东西?我想在Swift中进行大型计算,正整数大于UInt64的最大数.处理这些数字的最佳方法是什么?
我正在尝试解决projecteuler.net上的问题,但我一直遇到一些问题.
第一个是存储大量元素的问题List<t>.在列表中存储大量数据时,我一直收到OutOfMemoryException.
现在我承认我可能没有以最好的方式做这些事情但是,有没有办法定义应用程序可以消耗多少内存?
当我满足100,000,000个元素时,它通常会崩溃:S
其次,一些问题需要增加大量数字.我使用ulong数据类型,我认为这个数字会变得非常大,但我仍然设法绕过最大的受支持的int并进入负数.
你有任何使用难以置信的大数字的技巧吗?
在C++中处理大型数字输入的最佳方法是什么(例如10^100)?
对于算法,我通常切换到ruby,有时我会使用字符串.
还有其他好方法吗?
我正在做一些Project Euler问题,而且大多数时候,计算涉及超出int,float,double等的大量数字.
首先,我知道我应该寻找更有效的计算方法,以避免出现大量问题.我听说过Bignum图书馆.
但是,对于学术界的兴趣,我想知道如何编写我自己的解决方案来解决这个问题.
任何专家都可以帮帮我吗?(我的语言是C)
我需要编写一个算法(我不能使用任何第三方库,因为这是一个赋值)来划分(整数除法,浮动部分并不重要)非常大的数字,如100 - 1000位数.我找到了http://en.wikipedia.org/wiki/Fourier_division算法,但我不知道这是不是正确的方法.你有什么建议吗?
1) check divisior < dividend, otherwise it's zero (because it will be an int division)
2) start from the left
3) get equal portion of digits from the dividend
4) if it's divisor portion is still bigger, increment digits of dividend portion by 1
5) multiply divisor by 1-9 through the loop
6) when it exceeds the dividend portion, previous multiplier is the answer
7) repeat steps 3 to 5 until reaching to the end
Run Code Online (Sandbox Code Playgroud) 我有一个格式的整数文字0x75f17d6b3588f843b13dea7c9c324e51.有没有办法避免编译器语法错误"整数文字太大而无法在任何整数类型中表示"?
因为我知道我可以使用这些类型(我正在使用uint128_tEOS库,如果我手动插入它,它可以工作).
有没有办法在运行时以某种方式将此字符串直接解析为完全相同的整数?