相关疑难解决方法(0)

计算C#中的阶乘

如何使用C#计算大因子?Win 7中的Windows计算器在Factorial(3500)溢出.作为编程和数学问题,我有兴趣知道如何在C#中计算更大数字(20000,可能)的阶乘.有什么指针吗?

[编辑]我刚用Win 2k3上的计算结果检查过,因为我记得在Win 2k3上做了一个更大的因子.事情发展的方式令我感到惊讶.

  1. Win2k3上的Calc甚至可以处理大数字.我试过了!50000我得到了答案,3.3473205095971448369154760940715e + 213236

  2. 我这么做的时候速度非常快.

这里的主要问题不仅是找出适当的数据类型,而且还有点数学.如果我尝试在C#[递归或循环]中编写一个简单的因子代码,那么性能真的很糟糕.获得答案需要几秒钟.Windows 2k3(或XP)中的计算如何在不到10秒的时间内执行如此巨大的因子?有没有其他方法在C#中以编程方式计算factorial?

.net c#

17
推荐指数
5
解决办法
1万
查看次数

用于计算大因子的商的C++程序

如何编写c ++程序来计算大因子.

例如,如果我想计算(100!)/(99!),我们知道答案是100,但如果我分别计算分子和分母的阶乘,那么这两个数字都是巨大的.

c++

9
推荐指数
3
解决办法
7257
查看次数

使用c#lambda的n个数的阶乘...?

我刚开始玩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)

这是我使用的程序

  • 循环数字1到n - Enumerable.Range(1,range).
  • 选择每个数字x并再次循环它们x次(而不是递归)
  • 并选择其中(y =>(y> 1))大于1的数字并将其与(y-1)相乘

我知道我搞砸了某个地方.谁能告诉我什么是错的以及任何其他可能的解决方案.

编辑:

我打算让这个线程打开一段时间......因为这是我迈向lambda的最初步骤..我发现所有的答案都非常有用且信息丰富..而且它会变得有趣而且很好学习看到不同的接近方式这个问题.

c# linq lambda

6
推荐指数
3
解决办法
5741
查看次数

由于因子溢出导致的组合问题

我需要一个能够计算纸牌游戏(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)时我会溢出很长时间,但我需要的范围结果并不像它看起来那么大.

有没有办法克服这个问题?

c# java math

5
推荐指数
1
解决办法
287
查看次数

标签 统计

c# ×3

.net ×1

c++ ×1

java ×1

lambda ×1

linq ×1

math ×1