转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
大数阶乘的计算(三)         ★★★★

大数阶乘的计算(三)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:602 更新时间:2009/4/23 16:37:43

下面的算法在 http://www.csdn.net/Develop/Edit.asp?id=28308基础上改进,比其至少快10%:

Sub calcfactorial(ByVal n As Integer)
Dim XYS() As Integer, x() As Integer, y() As Integer, result() As String, i As Long, j As Long, k As Long, TEMP As Long, stimer As Double
If n < 0 Then Exit Sub
ReDim x(1)
ReDim XYS(1)
x(1) = 1
XYS(1) = 1
k = 1
stimer = Timer
Do While k <= n

TEMP = Len(CStr(k))
ReDim y(1 To TEMP)
For i = 1 To TEMP
y(i) = Val(Mid(k, TEMP + 1 - i, 1))
Next
ReDim XYS(1 To UBound(x) + UBound(y))
For i = 1 To UBound(x)
For j = 1 To UBound(y)
XYS(i + j - 1) = XYS(i + j - 1) + x(i) * y(j)
Next
Next
For i = 1 To UBound(x) + UBound(y) - 1
TEMP = XYS(i) \ 10
XYS(i) = XYS(i) Mod 10
XYS(i + 1) = XYS(i + 1) + TEMP
Next

x = XYS
If x(UBound(x)) = 0 Then ReDim Preserve x(1 To UBound(x) - 1)
k = k + 1
Loop
ReDim result(1 To UBound(x))
For i = 1 To UBound(x)
result(i) = x(UBound(x) + 1 - i)
Next

factorial = Join(result, "")
Debug.Print k - 1 & "! : 用时 "; Timer - stimer & " 秒, 结果 " & UBound(x) & " 位"
''''Debug.Print factorial
Erase x()
Erase y()
Erase XYS()
Erase result()
End Sub


 

Private Sub Command1_Click()
For i = 1 To 9
calcfactorial i * 100
Next
For i = 1 To 10
calcfactorial i * 100
Next

End Sub

结果输出:

100! : 用时 1.17187501018634E-05 秒, 结果 158 位
200! : 用时 3.10087890625255E-02 秒, 结果 375 位
300! : 用时 .1090087890625 秒, 结果 615 位
400! : 用时 .219002929687576 秒, 结果 869 位
500! : 用时 .344011718749925 秒, 结果 1135 位
600! : 用时 .547008789062602 秒, 结果 1409 位
700! : 用时 .75 秒, 结果 1690 位
800! : 用时 .9840087890625 秒, 结果 1977 位
900! : 用时 1.281005859375 秒, 结果 2270 位
1000! : 用时 1.59400292968758 秒, 结果 2568 位
2000! : 用时 8.36000292968743 秒, 结果 5736 位
3000! : 用时 20.4220146484374 秒, 结果 9131 位
4000! : 用时 38.1090146484376 秒, 结果 12674 位
5000! : 用时 61.6250058593751 秒, 结果 16326 位
6000! : 用时 91.1560175781251 秒, 结果 20066 位
7000! : 用时 126.781014648438 秒, 结果 23878 位
8000! : 用时 168.610005859375 秒, 结果 27753 位
9000! : 用时 216.530892578125 秒, 结果 31682 位
10000! : 用时 271.000017578125 秒, 结果 35660 位

 


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台