值大于ULong?计算100!

时间:2009-08-12 17:33:24

标签: c# asp.net vb.net math

我正在尝试计算100!并且似乎没有内置的阶乘函数。所以,我写了:

Protected Sub ComputeFactorial(ByVal n As ULong)
        Dim factorial As ULong = 1
        Dim i As Integer
        For i = 1 To n
            factorial = factorial * i
        Next
        lblAnswer.Text = factorial
    End Sub

不幸的是,在

中为n rseults运行此值为100
  

价值太大或太大   对于UInt64来说很小。

那么,是否有更大的数据类型来保存数字?我错了我的方法吗?我无助吗?

5 个答案:

答案 0 :(得分:7)

听起来像Project Euler。

.NET 4.0有System.Numerics.BigInteger,或者您可以在这里选择一个非常好的实现:
C# BigInteger Class

编辑:treed :(

我将添加 - CodeProject上的版本具有整数平方根,素数测试,Lucas序列生成等附加功能。此外,您无法直接访问.NET实现中的缓冲区,这对于我正在尝试的几件事情来说很烦人。

答案 1 :(得分:1)

在您使用System.Numerics.BigInteger之前,您将陷入使用像BigInteger on Code Project这样的非Microsoft实施。

答案 2 :(得分:1)

提示:使用数组存储数字的数字。您可以通过检查确定结果不会超过200位。

答案 3 :(得分:0)

您需要实施“BigNums”。这些是动态分配内存的整数,以便它们可以保存它们的值。

版本实际上是cut from the BCL

J#库具有java.math.BigInteger的实现,您可以使用任何语言。

或者,如果不考虑精度/准确度(你只关心数量级),你可以使用64位浮点数。

答案 4 :(得分:0)

十进制将处理0到+/- 79,228,162,514,264,337,593,543,950,335,没有小数点(刻度为零)