1

我正在学习计算机工程,我们有一项艰巨的任务。

我们必须开发一个 C# 应用程序,它可以在没有BIGINT的情况下计算非常大的数字的阶乘。我的意思是非常大的数字,比如123564891...82598413!. 而且我们不必使用自定义库(如BIGINT)的权限。

研究了一下,发现了一些这样的问题,但这个问题与其他问题不同,因为我们必须在没有任何自定义库的情况下计算非常大的数字。我找到了PoorMans算法。但它的计算量高达 10000 。这对我们来说还不够。

和我的队友一起,我们找到了解决方案。假设我们将得到 123 的阶乘。我们将得到 123 作为 String 。然后,我们将求和 123 , 122 次(等于 123 x 122)。然后将结果求和 121 次。它会一直这样直到达到 1。所以,我们将对两个字符串求和。

我们创建了一个对字符串求和的算法。我们将第一个数字(123 个中的 3 个)的最后一个字符作为整数(我们可以使用整数,但不能使用 bigint)。并将第二个数字的最后一个字符作为整数(122 中的 2)。将它们相加并找到结果编号的最后一个字符 (result = x...x5) 。我们将从最后一个字符到第一个字符进行操作。最后我们会得到结果编号。但是如你所知,我们应该使用 while() 或 for() 循环,而要使用这个循环,我们又需要 bigint。

String number = "9878945647978979798798797189"; //we will get factorial of this
for(int i = 0;i < number.Length; i++)
{
   // sum all chars one by one
}

我们不能使用这样的循环,因为i变量将超出整数范围,我们会得到错误。所以我们必须在这里使用 bigint。我希望我解释了。

现在我的问题是,创建一个算法的演练,该算法可以在不使用 BIGINT 的情况下计算真正大数的阶乘。

这是程序员的问题,而不是 Math.stackexchange.com 的问题,因为我需要直接的编程答案和演练。如果我在数学网站上问这个问题,他们会给我这个列表:http ://www.luschny.de/math/factorial/FastFactorialFunctions.htm 。可能他们不会理解我的“ BIGINT 问题”。

4

1 回答 1

4

您将不得不编写自己的大整数库。查看 Knuth 第 2 卷以开始使用。

你的期望看起来有点……过于热情。无论您做什么,都无法计算 9878945647978979798798797189 的阶乘

于 2013-04-05T01:32:15.620 回答