用VBS精確計(jì)算100的階乘的實(shí)現(xiàn)代碼
更新時(shí)間:2011年04月12日 15:46:11 作者:
運(yùn)行一下上面的程序,輸出2.43290200817664E+18。笑而不語(yǔ),再次證明了我之前的結(jié)論,在這種網(wǎng)站上回答問(wèn)題的,大部分水平都不咋地。
今天又無(wú)聊的逛了一下搜搜問(wèn)問(wèn),找到這樣一個(gè)問(wèn)題:
有誰(shuí)能提供vbs里20的階乘的詳細(xì)程序
下面有人給出了這樣的答案:
function jx(x)
j=1
for i=2 to x
j=j*i
next
jx=j
end function
msgbox jx(20)
運(yùn)行一下上面的程序,輸出2.43290200817664E+18。笑而不語(yǔ),再次證明了我之前的結(jié)論,在這種網(wǎng)站上回答問(wèn)題的,大部分水平都不咋地。
其實(shí)之前在《用VBS精確計(jì)算2的100次方》我已經(jīng)寫(xiě)過(guò)了VBS的大數(shù)乘法,調(diào)用一下就行了:
'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也寫(xiě)了一個(gè)求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
'把結(jié)果轉(zhuǎn)為字串。
str = ""
for i=max_digit to ubound(digits)
str = str & digits(i)
next
msgbox str
不過(guò),能寫(xiě)出這樣的程序的人,不會(huì)無(wú)聊到去回答搜搜問(wèn)問(wèn)的問(wèn)題吧。
原文:http://demon.tw/programming/vbs-factorial.html
有誰(shuí)能提供vbs里20的階乘的詳細(xì)程序
下面有人給出了這樣的答案:
復(fù)制代碼 代碼如下:
function jx(x)
j=1
for i=2 to x
j=j*i
next
jx=j
end function
msgbox jx(20)
運(yùn)行一下上面的程序,輸出2.43290200817664E+18。笑而不語(yǔ),再次證明了我之前的結(jié)論,在這種網(wǎng)站上回答問(wèn)題的,大部分水平都不咋地。
其實(shí)之前在《用VBS精確計(jì)算2的100次方》我已經(jīng)寫(xiě)過(guò)了VBS的大數(shù)乘法,調(diào)用一下就行了:
復(fù)制代碼 代碼如下:
'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也寫(xiě)了一個(gè)求1000階乘的VBS:
復(fù)制代碼 代碼如下:
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
'把結(jié)果轉(zhuǎn)為字串。
str = ""
for i=max_digit to ubound(digits)
str = str & digits(i)
next
msgbox str
不過(guò),能寫(xiě)出這樣的程序的人,不會(huì)無(wú)聊到去回答搜搜問(wèn)問(wèn)的問(wèn)題吧。
原文:http://demon.tw/programming/vbs-factorial.html
相關(guān)文章
文件夾定時(shí)自動(dòng)備份 AutoBackUpFolder.vbs
定時(shí)自動(dòng)備份文件夾到一個(gè)以時(shí)間命名的新目錄,設(shè)置好后加到啟動(dòng)項(xiàng)里,只要一啟動(dòng)機(jī)器程序就會(huì)自動(dòng)運(yùn)行,占系統(tǒng)資源可以不計(jì)。2009-07-07
Dynamic Activity Window動(dòng)態(tài)活動(dòng)窗口vbs
Dynamic Activity Window動(dòng)態(tài)活動(dòng)窗口2008-12-12
VBS教程:VBScript 語(yǔ)句-Set 語(yǔ)句
VBS教程:VBScript 語(yǔ)句-Set 語(yǔ)句...2006-11-11
用vbs實(shí)現(xiàn)返回 IP 配置數(shù)據(jù)
用vbs實(shí)現(xiàn)返回 IP 配置數(shù)據(jù)...2007-03-03
通過(guò)vbs修改以點(diǎn)結(jié)尾的文件的屬性為隱藏
這篇文章主要介紹了通過(guò)vbs修改以點(diǎn)結(jié)尾的文件的屬性為隱藏,需要的朋友可以參考下2016-12-12
VBS中獲取系統(tǒng)本次及上次開(kāi)關(guān)機(jī)時(shí)間的代碼(WinXP/win2003/Win7兼容版)
獲取系統(tǒng)本次及上次開(kāi)關(guān)機(jī)時(shí)間的vbs代碼,經(jīng)測(cè)試兼容WinXP/win2003/Win7系統(tǒng),喜歡的朋友可以收藏下2013-01-01
vbs,hta中選擇文件夾對(duì)話(huà)框?qū)崿F(xiàn)代碼
在vbs中選擇文件夾可以直接調(diào)用系統(tǒng)的文件夾對(duì)話(huà)框2009-08-08

