# Re: 问40!函数

Posted by Honey on April 19, 1999 at 23:20:49:

In Reply to: 问40!函数 posted by Jocer on April 18, 1999 at 22:33:42:

提供你以下程式
在表单上放 Command1 Text1
将Text1属性MultLin设成True
属性ScrollBars设成3

Option Explicit

Private Sub Command1_Click()
Dim LngH() As Long
Dim IntJ As Integer, IntK As Integer, IntI As Integer
Dim IntU As Integer
Text1.Text = ""
IntK = 1 '/*初设阵列只有一个*/
IntU = 1 '/*阵列不为零的使起数, 由于 _
经阶乘,后面会有多个零,遍不须列入计算 _
以节省时间*/
ReDim LngH(1 To IntK)
LngH(1) = 1
For IntJ = 2 To 100
'/*100!*/
For IntI = IntK To IntU Step -1
LngH(IntI) = LngH(IntI) * IntJ
If LngH(IntI) > 100000 Then
If UBound(LngH) <= IntI Then
ReDim Preserve LngH(1 To IntI + 1)
IntK = IntK + 1
End If
LngH(IntI + 1) = LngH(IntI + 1) + LngH(IntI) \ 100000
LngH(IntI) = LngH(IntI) Mod 100000
End If
Next
If LngH(IntU) = 0 Then
IntU = IntU + 1
End If
Next

Text1.Text = LTrim$(RTrim$(Str$(LngH(IntK))))

For IntI = UBound(LngH) - 1 To 1 Step -1
Text1.Text = Text1.Text & Chr(13) + Chr(10) + Format(LTrim$(RTrim$(Str$(LngH(IntI)))), "00000")
Next
End Sub

: For i=1 to 输入值 '(我是用Text1.text)
: For j=1 to 40
: K(j)=K(j)*i
: If K(j)>9 Then '判断进位
: K(j+1)=K(j+1)+K(j)\10
: K(j)=K(j) Mod 10
: End if
: Next j
: Next i
: 3.由K(40)至K(1)输出即所得

: 问题：
: 1.在TC下执行正常，但VB每次都当(没有回应)，还不至于重开机那么
: 严重，但为什么不能执行？
: 2.有同学质疑这方法是否太浪费记忆体了，因此请问是否有其他的方
: 法？
: 希望有人能为我解答，谢谢

Follow Ups: