jjzjj

BigInteger

全部标签

java - 为什么 Haskell 中的阶乘计算比 Java 中的快得多

我遇到的一个编程问题涉及计算大数(最多10^5的数)的阶乘。我见过一个简单的Haskell代码,它是这样的factorial::(Eqx,Numx)=>x->xfactorial0=1factoriala=a*factorial(a-1)它隐式地处理大量数字,并且即使在代码中不涉及任何缓存的情况下也能以某种方式运行得更快。当我尝试使用Java解决问题时,我不得不使用BigInteger来保存巨大的数字并使用迭代版本的阶乘publicstaticBigIntegerfactorialIterative(intn){if(n==0||n==1)returnBigInteger.valueO

java - BigInteger.toString 方法正在删除前导 0

我正在尝试使用MessageDigest生成MD5总和。我有以下代码。byte[]md5sum=digest.digest();BigIntegerbigInt=newBigInteger(1,md5sum);output=bigInt.toString(16);这返回的不是32个字符的字符串,而是一个31个字符的字符串8611c0b0832bce5a19ceee626a403a7预期的字符串是08611c0b0832bce5a19ceee626a403a7输出中缺少前导0。我尝试了其他方法byte[]md5sum=digest.digest();output=newString(He

java - BigInteger.toString 方法正在删除前导 0

我正在尝试使用MessageDigest生成MD5总和。我有以下代码。byte[]md5sum=digest.digest();BigIntegerbigInt=newBigInteger(1,md5sum);output=bigInt.toString(16);这返回的不是32个字符的字符串,而是一个31个字符的字符串8611c0b0832bce5a19ceee626a403a7预期的字符串是08611c0b0832bce5a19ceee626a403a7输出中缺少前导0。我尝试了其他方法byte[]md5sum=digest.digest();output=newString(He

java:在 BigInteger 的情况下 for 循环如何工作

我想将用户输入作为Big-Integer并将其操作到For循环中BigIntegeri;for(BigIntegeri=0;i但它不会起作用任何人都可以帮助我。 最佳答案 您可以改用以下语法:BigIntegeri=BigInteger.valueOf(100000L);//longi=100000L;i.compareTo(BigInteger.ONE)>0//i>1i=i.subtract(BigInteger.ONE)//i=i-1所以这里有一个把它放在一起的例子:for(BigIntegerbi=BigInteger.val

java:在 BigInteger 的情况下 for 循环如何工作

我想将用户输入作为Big-Integer并将其操作到For循环中BigIntegeri;for(BigIntegeri=0;i但它不会起作用任何人都可以帮助我。 最佳答案 您可以改用以下语法:BigIntegeri=BigInteger.valueOf(100000L);//longi=100000L;i.compareTo(BigInteger.ONE)>0//i>1i=i.subtract(BigInteger.ONE)//i=i-1所以这里有一个把它放在一起的例子:for(BigIntegerbi=BigInteger.val

java - 为什么 Haskell 可以轻松处理非常大的数字?

Hugs>94535^445137632088232137705069605388766151562110489016400528215306972642477399980184684190324482770294348798270745496600945601673504187800060414350090853288746492038060516493211268703905952667210981892423492084444823161253257071865716023417728537773383010483404104907660991248823721960844599

java - 为什么 Haskell 可以轻松处理非常大的数字?

Hugs>94535^445137632088232137705069605388766151562110489016400528215306972642477399980184684190324482770294348798270745496600945601673504187800060414350090853288746492038060516493211268703905952667210981892423492084444823161253257071865716023417728537773383010483404104907660991248823721960844599

java - 为什么这个 long 溢出到 -1,而不是类型的最小值?

当完整的二叉树layer层高时,我有以下代码返回树中的节点数:publicstaticlongnNodesUpToLayer(intlayer){if(layer奇怪的是,当我在函数中输入63(产生这个的最小值)时,它返回了-1。在62,它返回9223372036854775807,所以这似乎是由溢出引起的。难道不应该把Java的long的最小值+溢出的数量还给我吗?不管我给它的输入是什么(通过62),它总是会返回-1而不是我期望溢出的看似随机的数字。我不完全确定如何调试它,因为它是递归的,并且我感兴趣的值只有在函数达到基本情况后才会被评估。 最佳答案

java - 为什么这个 long 溢出到 -1,而不是类型的最小值?

当完整的二叉树layer层高时,我有以下代码返回树中的节点数:publicstaticlongnNodesUpToLayer(intlayer){if(layer奇怪的是,当我在函数中输入63(产生这个的最小值)时,它返回了-1。在62,它返回9223372036854775807,所以这似乎是由溢出引起的。难道不应该把Java的long的最小值+溢出的数量还给我吗?不管我给它的输入是什么(通过62),它总是会返回-1而不是我期望溢出的看似随机的数字。我不完全确定如何调试它,因为它是递归的,并且我感兴趣的值只有在函数达到基本情况后才会被评估。 最佳答案

java - 长与大整数

我了解java.lang.Long和java.math.BigInteger都可以容纳非常大的自然数。我也知道Long的最大值,但是BigInteger的最大值是多少?除了容量之外,BigInteger在处理仍然在Long范围内的一般大整数时会表现得更好吗?问题唯一的考虑是:我的值(value)对于Long来说是否太大? 最佳答案 BigInteger能够保存比Long大得多的数字。BigInteger似乎能够容纳(2^32)^Integer.MAX_VALUE,尽管这取决于实现(并且,即使在实现中真正无限,最终也会有物理资源限制)