Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c语言中处理非常大的整数#_C#_Factorial - Fatal编程技术网

C# 在c语言中处理非常大的整数#

C# 在c语言中处理非常大的整数#,c#,factorial,C#,Factorial,有人知道用c计算大整数的方法吗# 我试图计算数字的阶乘 5!=5*4*3*2*1=120 对于较小的数字,这不是问题,但试图计算无符号整数的最大值(4294967295)的阶乘似乎是不可能的 我已经研究过BigInteger类,但它似乎没有满足我的需要 任何帮助都将不胜感激。首先,值得指出的是,uint.MaxValue的阶乘非常大。我无法很好地估计它的阶乘的数量级,但它的位表示可能会占据标准RAM的很大一部分,如果不超过的话 一个biginger类似乎就是您想要的,前提是您只想增加到10000

有人知道用c计算大整数的方法吗#

我试图计算数字的阶乘

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

对于较小的数字,这不是问题,但试图计算无符号整数的最大值(4294967295)的阶乘似乎是不可能的

我已经研究过BigInteger类,但它似乎没有满足我的需要


任何帮助都将不胜感激。

首先,值得指出的是,
uint.MaxValue
的阶乘非常大。我无法很好地估计它的阶乘的数量级,但它的位表示可能会占据标准RAM的很大一部分,如果不超过的话

一个
biginger
类似乎就是您想要的,前提是您只想增加到1000000左右(非常粗略)。在那之后,时间和记忆变得非常令人望而却步。在当前(稳定)的.NET版本中,直到3.5版本,您必须使用自定义实现。在代码上,这个项目似乎得到了很高的评价。如果您碰巧是为.NET4.0开发的,Microsoft团队最终会在BCL的
System.Numerics
命名空间中包含一个类。与某些BigInteger实现不同,.NET 4.0中的现有实现没有内置的阶乘方法(我不确定CodeProject one),但实现一个阶乘方法应该很简单-扩展方法将是一种不错的方法


由于您似乎认为不想使用BigInteger类型,如果您能够在阅读我的回复后验证它不是您想要的类型,然后准确地解释为什么它不适合您的目的,这将非常有帮助。

尝试使用数组来完成此任务。只要有空闲内存空间,就可以使用尽可能长的整数。数组的每个成员代表一个十进制数字。您只需要实现多重功能。

现在可以使用J#libraries中的BigInteger类。这使得部署更加困难,因为您必须发送。你也可以考虑去as.< /p> 来计算<代码> uTin的因子。MaxValue < /C> >你需要大量的存储。

例如,as 8.2639316883。。。× 10^5,565,708. 你会疯狂地获取信息


我强烈怀疑你不会在一台理智的计算机上在一段理智的时间内找到任何计算它的方法。为什么需要这个值?Stirling的近似值足够接近吗?

如果安装了J#redist,另一种方法是使用
java.math.BigInteger
添加对
vjslib
程序集的引用。

为什么您认为需要计算这些阶乘?进行实际计算对任何事情都没有实际意义

仅仅计算(2^32-1)的阶乘的结果就会占用大量空间,大约16GB

计算本身当然要花很多时间。如果你建立了一个程序,这样你就可以把计算过程转移到发明的更快的硬件上,你应该能够在你的有生之年得到结果


如果你想解决的问题像是一个问题,那么你就可以找到很多解决方法,即你实际上不需要计算什么才能得到答案。

< P>如果你用组合之类的阶乘进行计算,例如,你很少需要乘以1的乘法。(例如98*98*97,因为所有其他的都会被抵消)。

4294967295!=10^(10^10.597)~10^(40000000000) 这个值需要大约40GB的RAM来存储,即使您可以找到任何C#的BigInteger实现

另外,使用优化的存储,比如说4个字节中的9个数字,它将占用约18GB的RAM。


最快的一个,直接来自阶乘人Peter Luschny。

它在2.0测试版中被删除了…当时是System.Numeric.BigInteger,我希望他们这次不要改变主意…@Mehrdad:的确。我知道它是从.NET 3.5中退出的,但不是2.0。在.NET 4.0测试版1中已经有一个稳定的实现,所以我是的,它是3.5。我认为它也是稳定的……有时人们会做一些愚蠢的事情;)谁知道呢:派斯,相当。不过,我对.NET开发人员有很大的信心。:)或者我只是乐观。。。文档已经编写好这一事实只能是一个好的迹象。是的,可能他们拉它是为了在v4.0中添加“动态”之外的内容开玩笑的。阶乘的问题是,即使在相对较小的整数(如256)上运行,它仍然会产生一个大约507位数的结果,所以我不愿意去想有多少位数4294967295!威尔·耶尔德。浮点变量对我的应用程序不有用。什么样的应用程序需要它?听起来更像是一个CS作业问题:)我仍然很好奇你在做什么,需要一个精确的值(2^32)!根据这个:^32)!大约是10^39507966976。从长远来看,可观测宇宙中的大约原子数仅为10^80,因此您看到的数字约为可观测宇宙中原子数的10^39507966896倍。您是否有实现所描述内容的基本代码?当你说数组的每个成员都代表一个十进制数字时——这不是在浪费空间吗?因为即使我有一个字节数组——每个字节都会包含一个数字,而实际上它最多可以包含255个值。除非我不明白你的意思?!我意识到这与创建新的整数类型类似。您需要实现基本操作,如多应用程序。将1个十进制数字存储到字节中可能会浪费空间。但是您可以使用位数组(例如BitArray类)。这里有一些基本的代码,希望它能有所帮助。我不认为任何近似方法都能解决这个问题