用VBS精确计算100的阶乘的实现代码
程序员文章站
2022-06-23 21:02:49
今天又无聊的逛了一下搜搜问问,找到这样一个问题: 有谁能提供vbs里20的阶乘的详细程序 下面有人给出了这样的答案: 复制代码 代码如下: function jx(x) j...
今天又无聊的逛了一下搜搜问问,找到这样一个问题:
有谁能提供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
不过,能写出这样的程序的人,不会无聊到去回答搜搜问问的问题吧。
原文:
有谁能提供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
不过,能写出这样的程序的人,不会无聊到去回答搜搜问问的问题吧。
原文:
上一篇: VBScript 文件操作代码小结
下一篇: 用vbs得到计算机的 IP 地址