有谁知道的一种方法,我可以计算出在C#中非常大的整数

我试图计算数字e.g的阶乘。

5! = 5 * 4 * 3 * 2 * 1 = 120

与小的数字,这不是一个问题,但尝试计算一个无符号整型,其是的bigest值的阶乘4294967295它似乎并不可能的。

我看着BigInteger类,但它似乎并没有做什么,我需要

任何帮助,将不胜感激

有帮助吗?

解决方案

4294967295! = 10 ^(10 ^ 10.597)〜10 ^(400亿) 这个值大约需要40的RAM存储GB,即使你会发现任何的BigInteger实施C#!

P.S。那么,与优化的存储,让我们说9位中的4个字节,将需要的RAM〜18 GB。

其他提示

要计算uint.MaxValue的你需要一个的很多阶乘的存储空间。

例如,在维基百科文章如8.2639316883 ...×10 ^ 5565708。你会得到像疯了似的信息。

我的强烈的怀疑,你不会找到的时候神志清醒量计算是一个理智的计算机上的任何方式。为什么你需要这个值?将斯特灵公式是足够接近?

首先,这是值得指出uint.MaxValue的阶乘是天文大。我无法找到它的阶乘的数量级的好估计,但它的位表示可能会占用一个标准的RAM的比例很高,如果不能很好地超过。

一个BigInteger类似乎是你想要的东西,为您提供只想去到各地的100万左右(非常粗略地)。在此之后,时间和存储变得非常高昂。在.NET中的电流(稳定)版本,高达3.5,你必须去与一个自定义实现。 在CodeProject上这一个似乎高度评价。如果你碰巧被开发用于.NET 4.0,微软团队终于得到了周围包括的BigInteger命名空间.ASPX”的rel = “noreferrer”> System.Numerics 类。不像一些BigInteger的实现中,一个现有的在.NET 4.0中没有内置因法(我不知道CodeProject上一个),但它应该是微不足道的实施一个 - 扩展方法将是一个不错方式。

既然你似乎认为你不希望使用的BigInteger类型,这将是有益的,如果你能确认这是你想要在看过我的回答不是,然后解释正是为什么它不适合您的目的

为什么你认为你需要计算阶乘那些?这不是practiacally有用的东西做实际的计算。

计算的(2 ^ 32-1)阶乘的只是其结果将占用大量的空间,大约16 GB。

在计算本身当然会花费大量的时间。如果你建立的程序,这样就可以计算过程转移到更快的硬件,因为它是发明的,你应该能够在您的一生中得到的结果。

如果它的东西,像一个欧拉的问题,你正在试图解决,考虑了很多解决被发现通过elliminating它是什么,你居然没有为了得到答案来计算。

此处。 最快的一个,直接从阶乘曼 - 彼得Luschny

可以使用BigInteger类从J#库现在。 下面是关于如何的文章。它使部署困难,因为你必须发送出的 J#可再发行。您也可以考虑去 VS2010测试版 Framework 4.0中会有的BigInteger

在情况下,必须安装J#REDIST,一种替代方式将使用java.math.BigInteger通过向vjslib集的引用。

尝试使用的阵列为这个任务。你有免费的存储空间,您可以使用,只要整数。阵列中的每个成员repsesents一个十进制数字。你唯一需要的是落实multipication。

如果您正在使用类似的组合阶乘做计算,例如,你很少需要一路下跌到乘以1(例如,98 * 98 * 97,因为一切抵消)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top