English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

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 電腦與網際網路 程式設計

4 個解答

...為了驗證 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

fedest.com, questions and answers