我正在尝试计算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来说很小。
那么,是否有更大的数据类型来保存数字?我错了我的方法吗?我无助吗?
答案 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,没有小数点(刻度为零)