N階層數
請寫一個程式求出 n! 的結果數值中,從右邊算來第一個不是0的數字(0 n 10000)。
例如:
3!=6 所以輸出 6。
5!=120 所以輸出 2。
10!=3628800 所以輸出 8。
輸入規範
輸入檔案中包含好幾筆資料,每筆資料一行,包含一個整數n(0 n 10000)。如果輸入的n=0,代表輸入結束。
輸出規範
對每行輸入,輸出N! 從右邊算來最後一個不是0的數字。
輸入範例(test3.txt)
1
10
26
125
3125
0
輸出範例(result3.txt)
1
8
4
8
2
輸入3125運算太多太lag該怎麼寫才不會lag
2006-11-22 14:45:44 · 4 個解答 · 發問者 ?? ?d 1 in 電腦與網際網路 ➔ 程式設計
...為了驗證 N>3125的答案是否正確花了半小時..OrzPrivate Sub Command1_Click() Dim ans As Currency Open "C:\test3.txt" For Input As #1 Do Until EOF(1) Input #1, N ans = 1 For i = 1 To N ans = ans * i '去除 0 尾數 If Right$(ans, 1) = "0" Then Do ans = Left(ans, Len(CStr(ans)) - 1) Loop Until Right$(ans, 1) End If ans = Right(ans, 10) '將乘積取後10位數 If (i = N) Then 'Print i, Right(ans, 1) Open "C:\result3.txt" For Append As #2 Print #2, Right(ans, 1) Close #2 End If Next Loop Close #1End Sub
2006-11-22 20:28:52 · answer #1 · answered by ? 6 · 0⤊ 0⤋
looping大:能否再解說詳細點?
2006-11-23 12:53:19 補充:
謝謝looping大,清楚明瞭,來做做看囉!!
2006-11-22 19:55:44 · answer #2 · answered by W.J.S. 7 · 0⤊ 0⤋
階層可拆成質因數乘積
而每個質因數個數也可很快算出
再者質因數2及5可以消掉一部份(2*5=10)
再配合每個質因數的循環+Mod的運算特性,應該可以快速算出
2006-11-23 07:07:43 補充:
例如 7!
(1) 7內質數2,3,5,7 (用篩法找)
7/2+7/4+7/8=3+1+0=4
7/3+7/9=2
7/5+7/25=1
7/7+7/49=1
7!=2^4*3^2*5*7=5040
2^4*3^2*5*7
(2*5產生10)
有用部份 2^3*3^2*7
(2^N)找尾數有個循環
2^1=[2] 2^2=[4] 2^3=[8] 2^4=1[6]
答案為 (((8*9)%10)*7)%10=4
2006-11-22 19:29:52 · answer #3 · answered by ? 4 · 0⤊ 0⤋
如果你是用迴圈寫的話,請在For i = x to x的下一行打上這個:
DoEvents
2006-11-22 17:48:52 · answer #4 · answered by 天使 4 · 0⤊ 0⤋