如何使用C#计算大因子?Win 7中的Windows计算器在Factorial(3500)溢出.作为编程和数学问题,我有兴趣知道如何在C#中计算更大数字(20000,可能)的阶乘.有什么指针吗?
[编辑]我刚用Win 2k3上的计算结果检查过,因为我记得在Win 2k3上做了一个更大的因子.事情发展的方式令我感到惊讶.
Win2k3上的Calc甚至可以处理大数字.我试过了!50000我得到了答案,3.3473205095971448369154760940715e + 213236
我这么做的时候速度非常快.
这里的主要问题不仅是找出适当的数据类型,而且还有点数学.如果我尝试在C#[递归或循环]中编写一个简单的因子代码,那么性能真的很糟糕.获得答案需要几秒钟.Windows 2k3(或XP)中的计算如何在不到10秒的时间内执行如此巨大的因子?有没有其他方法在C#中以编程方式计算factorial?
如何编写c ++程序来计算大因子.
例如,如果我想计算(100!)/(99!),我们知道答案是100,但如果我分别计算分子和分母的阶乘,那么这两个数字都是巨大的.
我刚开始玩lambdas和Linq表达自学.我为此采取了简单的因子问题.在一个复杂的小场景中,找到给定n个数的阶乘(无需使用递归循环).
在我试过的代码下面.但这不起作用.
public void FindFactorial(int range)
{
var res = Enumerable.Range(1, range).Select(x => Enumerable.Range(0, x).Where(y => (y > 1)).Select(y => y * (y-1)));
foreach (var outt in res)
Console.WriteLine(outt.ToString());
}
Run Code Online (Sandbox Code Playgroud)
这是我使用的程序
我知道我搞砸了某个地方.谁能告诉我什么是错的以及任何其他可能的解决方案.
编辑:
我打算让这个线程打开一段时间......因为这是我迈向lambda的最初步骤..我发现所有的答案都非常有用且信息丰富..而且它会变得有趣而且很好学习看到不同的接近方式这个问题.
我需要一个能够计算纸牌游戏(n,k)的数学组合的函数.
我目前的尝试是使用基于通常Factorial方法的函数:
static long Factorial(long n)
{
return n < 2 ? 1 : n * Factorial(n - 1);
}
static long Combinatory(long n , long k )
{
return Factorial(n) / (Factorial(k) * Factorial(n - k));
}
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但问题是当我使用一些数字范围(n值最大值为52且k值max最大值为4)时,它会让我返回错误的值.例如:
long comb = Combinatory(52, 2) ; // return 1 which should be actually 1326
Run Code Online (Sandbox Code Playgroud)
我知道这是因为当我制作因子(52)时我会溢出很长时间,但我需要的范围结果并不像它看起来那么大.
有没有办法克服这个问题?