用VBS精确计算100的阶乘的实现代码

所属分类: 脚本专栏 / vbs 阅读数: 1355
收藏 0 赞 0 分享
今天又无聊的逛了一下搜搜问问,找到这样一个问题:

有谁能提供vbs里20的阶乘的详细程序

下面有人给出了这样的答案:
复制代码 代码如下:

function jx(x)
j=1
for i=2 to x
j=j*i
next
jx=j
end function
msgbox jx(20)

运行一下上面的程序,输出2.43290200817664E+18。笑而不语,再次证明了我之前的结论,在这种网站上回答问题的,大部分水平都不咋地。

其实之前在《用VBS精确计算2的100次方》我已经写过了VBS的大数乘法,调用一下就行了:
复制代码 代码如下:

'Author: Demon
'Website: http://demon.tw
'Email: 380401911@qq.com
Option Explicit
Function multiple(byVal x, byVal y)
Dim n, t, i, j, z, w()
n = Len(x) - 1
t = Len(y) - 1
ReDim w(n + t + 1)
x = CStr(x) : y = CStr(y)
For i = 0 To UBound(w)
w(i) = "0"
Next
For i = 0 To t
Dim c : c = 0
Dim uv : uv = 0
For j = 0 To n
uv = (w(i+j)-"0") + c + _
(Mid(x,n-j+1,1)-"0") * (Mid(y,t-i+1,1)-"0")
w(i+j) = CStr(uv Mod 10 + "0")
c = uv \ 10
Next
w(i+n+1) = CStr(uv \ 10 + "0")
Next
z = Join(w,"")
z = StrReverse(z)
Do While Left(z,1) = "0"
z = Mid(z,2)
Loop
multiple = z
End Function
Function factorial(n)
Dim i, t : t = 1
For i = 1 To n
t = multiple(t, i)
Next
factorial = t
End Function
Dim t : t = Timer
WScript.Echo factorial(100)
WScript.Echo Timer - t

另外,dogfish也写了一个求1000阶乘的VBS:
复制代码 代码如下:

dim digits(2568)
max_digit = 2568
digits(max_digit) = 1
for d=2 to 1000
for k=max_digit to ubound(digits)
digits(k) = digits(k) *d
next
k = ubound(digits)
while k>=max_digit
if digits(k)>10 then
digits(k-1) = digits(k-1) + fix(digits(k) / 10)
digits(k) = digits(k) mod 10
if k-1<max_digit then
max_digit = k - 1
end if
end if
k = k-1
wend
next
'把结果转为字串。
str = ""
for i=max_digit to ubound(digits)
str = str & digits(i)
next
msgbox str

不过,能写出这样的程序的人,不会无聊到去回答搜搜问问的问题吧。
原文:http://demon.tw/programming/vbs-factorial.html
更多精彩内容其他人还在看

运行vbs脚本报错无效字符、中文乱码的解决方法(编码问题)

今天在写一个vbs的时候,发现中文乱码,后来写好代码正常运行的代码压缩一下给了同事,发现报无效字符,经过验证后发现原来是编码的问题导致,这里就为大家分享一下
收藏 0 赞 0 分享

VBS打开当前脚本所在文件夹

有时候我们需要获取当前vbs脚本所在的文件夹,或者运行当前脚本文件夹中的文件那么就需要参考下面的代码了
收藏 0 赞 0 分享

vbs 读写注册表之系统启动项添加与删除

这篇文章主要介绍了vbs 读写注册表之系统启动项添加值,需要的朋友可以参考下
收藏 0 赞 0 分享

拖拽文件显示文件路径的vbs代码

这篇文章主要介绍了拖拽文件显示文件路径的vbs代码,需要的朋友可以参考下
收藏 0 赞 0 分享

VBS遍历Excel工作表的实现代码

这篇文章主要介绍了VBS遍历Excel工作表的实现代码,需要的朋友可以参考下
收藏 0 赞 0 分享

使用VBS浏览本地文件的3种方式,获取完整路径

这篇文章主要介绍了使用VBS浏览本地文件的3种方式,获取完整路径,需要的朋友可以参考下
收藏 0 赞 0 分享

VBS进程判断代码

这篇文章主要介绍了VBS进程判断代码,用来检测windows的某个进程是否正常运行,之前脚本之家分享过bat中判断进程的代码
收藏 0 赞 0 分享

VBS遍历文件或文件夹路径输入文件的所有绝对路径(附源码)

这篇文章主要介绍了VBS遍历文件或文件夹路径输入文件的所有绝对路径的代码,需要的朋友可以参考下
收藏 0 赞 0 分享

ActiveX部件不能创建对象:dm.dmsoft代码:800A01AD

vbs调用插件报:ActiveX部件不能创建对象,代码:800A01AD,一般是因为病毒导致dll文件丢失或者64系统问题导致,需要的朋友可以参考下
收藏 0 赞 0 分享

vbs ping实现的两种方式

这篇文章主要介绍了vbs ping实现的两种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享
查看更多