2012年1月21日 星期六

Oh! My Zero!!

內容
階層運算是很令人頭疼的,因此我们要想方設法地把它簡化。
輸入說明 :
输入檔可能有大量的數據。
每一个输入檔输入一个不算很大的數 n (请用 long)。
輸出說明 :
輸出 n!的末尾零的個數。
範例輸入 :
1 
2 
10
範例輸出 :
0 
0 
2
提示 :
1!=1 末尾有0個零;
2!=2 末尾有0個零;
10!=3628800 末尾有2個零。

5 則留言:

  1. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Do Until EOF(1)
    Input #1, x
    ans = 0
    For i = 1 To x
    y = i
    Do
    If y Mod 5 = 0 Then
    ans = ans + 1
    y = y \ 5
    Else
    Exit Do
    End If
    Loop
    Next
    Print #2, ans
    Loop
    Close
    Close
    End
    End Sub

    回覆刪除
  2. 小冰好,
    這題正確。
    改進點:既然都是關係到5,那麼外圈就用step 5可以更簡單。
    內圈
    do whil y mod 5=0
    ans=ans +1
    y=y\5
    loop

    回覆刪除
  3. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Do Until EOF(1)
    Input #1, n
    ans = 0
    For i = 1 To n
    If i Mod 5 = 0 Then
    ans = ans + 1
    End If
    Next i
    Print #2, ans
    Loop
    Close #2
    Close #1
    End
    End Sub

    回覆刪除
  4. 晟晟好,
    這題並不正確哦。
    出現0的地方,除了5,10,15,20,之外,下一個25,就有不同的狀況了。

    另外,
    這題還有一個副題是,算階「乘」中的第1個不是0的數字。
    也就是本題是算幾個0,副題是算這幾個0之後,第1個不是0的數。
    (當然,要算第2個也行哦)

    回覆刪除
  5. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Dim n As Long
    Do Until EOF(1)
    Input #1, n
    m = 1
    Sum = 0
    For i = 1 To n
    m = m * i
    If m Mod 10 = 0 Then
    m = m \ 10
    Sum = Sum + 1
    End If
    Next i
    Print #2, Sum
    Loop
    Close #2
    Close #1
    End
    End Sub

    回覆刪除