作者x000032001 (八云)
看板Visual_Basic
标题[VB6 ] 大数阶乘问题
时间Sat Feb 6 12:36:39 2010
问题:
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