C# 不使用大整数库的阶乘算法

C# 不使用大整数库的阶乘算法,c#,algorithm,biginteger,factorial,C#,Algorithm,Biginteger,Factorial,我在学计算机工程,我们有一项艰巨的任务 我们必须开发一个C应用程序,它可以在不使用BIGINT的情况下计算真正大数的阶乘。我是说非常大的数字,比如123564891…82598413。我们不需要使用像BIGINT这样的自定义库的权限 研究了它,发现了一些类似的问题,但这个问题与其他问题不同,因为我们必须在没有任何自定义库的情况下计算真正大的数字。我找到了。但计算起来是10000。这对我们来说还不够 和我的队友一起,我们找到了解决办法。假设我们得到123的阶乘。我们将得到123作为字符串。然后,我

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

我们必须开发一个C应用程序,它可以在不使用BIGINT的情况下计算真正大数的阶乘。我是说非常大的数字,比如123564891…82598413。我们不需要使用像BIGINT这样的自定义库的权限

研究了它,发现了一些类似的问题,但这个问题与其他问题不同,因为我们必须在没有任何自定义库的情况下计算真正大的数字。我找到了。但计算起来是10000。这对我们来说还不够

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

我们创建了一个字符串求和算法。我们将123的第一个数字3的最后一个字符作为一个整数,我们可以使用integer,但不能使用bigint。并将第二个数字的最后一个字符作为122的整数2。求和并找到结果编号的最后一个字符结果=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的问题,因为我需要直接的编程答案和演练。如果我在数学网站上问这个问题,他们会给我这个列表:。也许他们不会理解我的“BIGINT问题”

您必须编写自己的大整数库。检查Knuth第2卷以开始


你的期望看起来有点。。。太热情了。无论您做什么,都无法计算98789456479789798798797189的阶乘。

您必须编写自己的大整数库。检查Knuth第2卷以开始


你的期望看起来有点。。。太热情了。无论你做什么,你都无法计算98789456479789798798797189的阶乘。

我认为这个练习要求你编写自己的bigint库。你知道数字增长非常快吗,你甚至无法在示例中存储数字的所有数字。而且还需要很长时间。@Eray你对我们有什么期望?给你写?我在你的帖子中看不到任何问号,否则,作为一名计算机工程专业的学生,你可以实施自己的尖刻课程。我想你已经读过98789456479789798798797189//我们将得到这个的阶乘。假设你每秒可以进行10亿次乘法:,需要313259311516年。@Eray我可能犯了一个错误,我可能只有310亿年。.我想这个练习要求你编写自己的bigint库。你知道数字增长得非常快吗,在示例中,您甚至无法存储所有数字。而且还需要很长时间。@Eray你对我们有什么期望?给你写?我在你的帖子中看不到任何问号,否则,作为一名计算机工程专业的学生,你可以实施自己的尖刻课程。我想你已经读过98789456479789798798797189//我们将得到这个的阶乘。假设你每秒可以进行10亿次乘法:,需要313259311516年。@Eray我可能犯了一个错误,我可能只有310亿年。。是的,它有点过于热情,我的意思是程序不应该有任何限制。是的,它有点过于热情,我的意思是程序不应该有任何限制。