用C#计算100!,请编写代码?请高手赐教

来源:百度知道 编辑:UC知道 时间:2024/05/20 06:16:19
如果double sum = 1;
for (int i = 1; i <= 100; i++)
sum *= i;
这样结果会溢出哦!只有分段来做才行

这是很大的数据,用一个简单变量类型是表示不出来的。
自己写个LargeNumber类,例如
Class LargeNumber
{
byte[] numArr;
int size;
public LargeNumber(int size)
{
this.size=size;
numArr=new byte[size];
}
public LargeNumber():this(10)
{

}
}
然后你可以通过重载运算符或者自己编写函数来实现大数的加减乘除运算。
其实只要实现加和乘法运算就可以了。实现起来也是比较容易,比如一个byte数据是1个字节,最大为255,假设限制让一个byte最大表示到99,当表示一个数据位的byte超过99时就向前面进一。
最后按顺序打印就可以知道数据了。
不过估计数据非常大,可能上百位

刚才看了楼上的发言,发现double的确足够表示。不过1000!恐怕用double表示不了了

嗯,如下面所说,1000的阶乘就不行,显示正无穷大
不过似乎用biginteger能更大一些,但是···那个东西要用反射才可以用···

谁说会溢出的?
double sum = 1;
for (int i = 1; i <= 100; i++)
sum *= i;
Console.WriteLine(sum);
你自己测试看看啊
9.33262154439441E+157
这个不是好好的吗?

9.33262154439441E+157,这个是计算结果,没有溢出。代码如下:
private void Form1_Load(object sender, EventArgs e)
{
double sum = 1;
for (int i = 1; i <= 100;