[VB6 ] 大數階乘問題

看板Visual_Basic作者 (八雲)時間14年前 (2010/02/06 12:36), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
問題: 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
文章代碼(AID): #1BRF7Q1U (Visual_Basic)