C#中的概率计算器

问题描述

我遇到了编程问题。

我一直在尝试用 c# 做一个概率计算器之类的东西,为此我需要一个某种类型的阶乘。我知道如何编程factorial,但我需要

从零到某个给定数字的所有阶乘的总和。

假设输入的数字是某个常量r,我想要的是:

0! + 1! +2! + ... + (r-1)! + r!

这是我到目前为止所得到的,但仍然不起作用:

double a,j,k = 1,sum = 1,l = 1;

for (a = 1; a <= f; a ++)
{
    for (j = 1; j <= a; j++)
    {
        l = k * j;
    }

    sum = sum + l;
}

Console.WriteLine(sum);

解决方法

一个简单的 for 循环就足够了。由于 factorial 增长很快,让我们使用 BigInteger 类型; 但是,如果您愿意,可以将所有 BigInteger 更改为 double

using System.Numerics;

...

// 0! + 1! + 2! + ... + value!
public static BigInteger MyFunc(int value) {
  if (value < 0)
    throw new ArgumentOutOfRangeException(nameof(value));

  BigInteger result = 1;
  BigInteger factorial = 1;

  for (int i = 1; i <= value; ++i) 
    result += (factorial *= i);

  return result;
}

演示:

using System.Linq;

...

int[] tests = new int[] {
  0,1,2,3,4,5,6,7
};

string report = string.Join(Environment.NewLine,tests.Select(x => $"{x} => {MyFunc(x),4}"));

Console.WriteLine(report);

结果:

0 =>    1
1 =>    2
2 =>    4
3 =>   10
4 =>   34
5 =>  154
6 =>  874
7 => 5914