如何解决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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。