末尾零來源於 10 = 2 × 5。階乘中因子 2 遠多於 5,**零的個數 = n! 中質因子 5 的總指數**。
每 5 貢獻 1 個 5,每 25 貢獻額外 1 個,每 125 再額外 1 個……
公式:count = n/5 + n/25 + n/125 + ... (直到商為 0)
#include <stdio.h>
int trailingZeros(int n) {
int count = 0;
for (int i = 5; i <= n; i *= 5)
count += n / i;
return count;
}
int main() {
int n;
while (scanf("%d", &n) == 1)
printf("%d\n", trailingZeros(n));
return 0;
}
| n | n! | 末尾零 | 公式計算 |
|---|---|---|---|
| 5 | 120 | 1 | 5/5=1 |
| 10 | 3628800 | 2 | 10/5 + 10/25 = 2+0=2 |
| 25 | ... | 6 | 25/5 + 25/25 = 5+1=6 |
| 100 | ... | 24 | 100/5 + 100/25 + 100/125 = 20+4+0=24 |
時間 O(log₅ n),空間 O(1),極高效。