用VBS精确计算100的阶乘的实现代码
用VBS精确计算100的阶乘的实现代码
发布时间:2016-12-28 来源:查字典编辑
摘要:今天又无聊的逛了一下搜搜问问,找到这样一个问题:有谁能提供vbs里20的阶乘的详细程序下面有人给出了这样的答案:复制代码代码如下:funct...

今天又无聊的逛了一下搜搜问问,找到这样一个问题:

有谁能提供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学习
脚本专栏子分类