[VB6 ] 大數階乘問題
問題:
http://zerojudge.tw/ShowProblem?problemid=d340
題目範圍是
1!~3150! 1位數到9654位數
所以開了9700的陣列
從1!跑到3150! 如果找到了就跳出
再列印
因為1位數跟3位數不只一個解 就拿出來直接印
其他的就把陣列的內容印出來
在自己的電腦上跑感覺上是在三秒內 傳上去卻TLE 說我超過三秒
難道題目是三秒內跑出1~9654的解嗎 囧
還是我的演算法太弱算不出來
下面的程式碼是用FreeBASIC寫的 不過很接近VB6 實質上有點C++的味道在裡面
open CONS是代表使用console介面輸出入 其他的應該沒有閱讀上的衝突~"~
請高手指點
ReDim buff(9700) As Integer
Dim uper As Integer = 1
Dim As Integer inputN ,i ,findAns
buff(0) = 1
open CONS For input as #1
input #1 , inputN
Do until EOF(1)
'1!~3150!
For i = 1 To 3150
'big Num Mul
For b = 0 To uper+5
buff(b) = buff(b) * i
Next
For c = 0 To uper+5
buff(c+1) = buff(c+1) + buff(c) \ 10
buff(c) = buff(c) Mod 10
IF buff(c) = 0 and buff(c-1) <> 0 then
uper = c
End IF
Next
'Find when uper = inputN
If uper = inputN Then findAns = 1 : Exit For
If uper > inputN Then Exit For
Next
Select Case uper
Case 1
Print "Find : 0!,1!,2!,3!"
Print "0! = 1"
Print "1! = 1"
Print "2! = 2"
Print "3! = 6"
Case 2
Print "Find : 4!"
Print "4! = 24"
Case 3
Print "Find : 5!,6!"
Print "5! = 120"
Print "6! = 720"
Case Else
If findAns = 1 Then
Print "Find : " & i & "!"
Print i & "! = ";
For z As Integer = uper-1 To 0 Step -1
Print Str(buff(z));
Next
Print
Else
Print "NO find"
EndIf
End Select
'init
ReDim buff(max) As Integer
uper = 1
buff(0) = 1
findAns = 0
input #1 , inputN
Loop
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.240.38.36