整数n的阶乘指 1*2*3*...*(n-1)*n 的值,在n=171时,计算机一般会出错(“溢出”),本文采用字符串模拟数字乘法运算,使计算10000!成为可能:
Function multi(ByVal X As String, ByVal Y As String) As String 'multi of two huge hexnum(两个大数之积)
Dim result As Variant
Dim xl As Long, yl As Long, temp As Long, i As Long
xl = Len(Trim(X))
yl = Len(Trim(Y))
ReDim result(1 To xl + yl)
For i = 1 To xl
For temp = 1 To yl
result(i + temp) = result(i + temp) + Val(Mid(X, i, 1)) * Val(Mid(Y, temp, 1))
Next
Next
For i = xl + yl To 2 Step -1
temp = result(i) \ 10
result(i) = result(i) Mod 10
result(i - 1) = result(i - 1) + temp
Next
If result(1) = "0" Then result(1) = ""
multi = Join(result, "")
Erase result
End Function
Private Sub Command1_Click() '节约时间,算到1000!
For i = 1 To 9
calcfactorial i * 100
Next
End Sub
Sub calcfactorial(ByVal n As Integer)
Dim a() As String, i As Long, stimer As Double
ReDim a(1 To n)
a(1) = 1
stimer = Timer
For i = 2 To n
a(i) = multi(a(i - 1), i)
Next
Debug.Print n & "! : 用时 "; Timer - stimer & " 秒, 结果 " & Len(a(n)) & " 位"
Debug.Print a(n)
End Sub
100! : 用时 4.67617187496217E-02 秒, 结果 158 位
200! : 用时 .407124999999724 秒, 结果 375 位
300! : 用时 1.00012499999957 秒, 结果 615 位
400! : 用时 1.92199999999957 秒, 结果 869 位
500! : 用时 3.14013671875 秒, 结果 1135 位
600! : 用时 4.68677343750005 秒, 结果 1409 位
700! : 用时 6.64099999999962 秒, 结果 1690 位
800! : 用时 8.9208984375 秒, 结果 1977 位
900! : 用时 11.5000117187501 秒, 结果 2270 位
1000! : 用时 14.5621367187496 秒, 结果 2568 位
分享到:
相关推荐
大数阶乘数据结构算法课程设计-副本.pdf
用汇编实现的大数阶乘算法,这个算法可以实现任意大的两个数相乘
数据结构算法与应用代码,大数阶乘,通过单链表实现大数阶乘,对比较的书进行阶乘运算,主要是通过单链表实现
阶乘 阶乘计算 大数阶乘 大整数阶乘 用数组计算阶乘
用java计算大数的阶乘,记得应该可以十秒内算出1000以内阶乘(时间很久了,大概是这样)。理论上是可以算无限大的数的阶乘的。可以作为程序设计实验课的作业。核心算法,没有赔UI。复制粘贴即可运行
基于单链表的大数阶乘,并有相应的程序执行效率的时间函数
大数阶乘如1000!无数据类型可以表示,用链表实现大数阶乘
用双链表实现大数阶乘运算,可以测试其性能,里面有相映的时间测试函数
用双向链表实现大数阶乘 输入一个不限制大小的数 即可计算出它的阶乘
计算大数阶乘,利用数组存储数据防止使用int,long,long long等存储数据溢出的情况。
由于计算机存储位数的限制,运用链表实现大数阶乘
用数组来实现大数的阶乘运算,运算结果保存在一个数组中,每个数组元素村3为数字。
C# 大数阶乘 源程序 用于计算10001以下所有整数的阶乘 删除程序输入数的大小限制 理论上 可用于计算的数可以无限大
在控制台界面上运用链表进行大数阶乘运算并输出
用C语言编写的大数阶乘运算,有详细注释,纯C语言,可以用任何一种C编译器编译。
可以进行大数的运算/计算(四则运算、快速A^B%C),生成随机大素数,大数阶乘等。
实现了大数精确的计算并输出,可以用于要求得到精确值的算法中。
该软件是闲暇之于用BCB写的一个窗口界面计算器,主要是支持大数阶乘,其他的都没啥。可以保存计算结果。
可以算1000左右的大数阶乘,如果要算更大,改变数组的大小
自己写的计算阶乘的程序,能近似计算4亿以下的数字的阶乘。并且能精确到100位以上,且可任意设置。希望对你有所帮助