n!=1*2*...*m*...*n。令m从1到n遍历,当m是5的倍数时,n!的结果中0的个数会增加。并且,m中包含几个因子5,结果中增加几个0。所以程序只需统计因子5的个数总和即可。例如,m = 5 = 5*1(包含1个因子5),结果中增加1个0;m = 35 = 5*7,结果中增加1个0; m = 625 = 5*5*5*5,(*2*2*2*2)结果中增加4个0。因为n!(1<=n<=1000)中偶数因子的个数肯定多于因子5的个数,所以不需要再去比较因子5的个数和因子2的个数,显然因子5的个数更少。代码如下:

#include<iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    if (n < 0)return 0;
    if(n==0){
        cout<< 0 <<endl;
        return 0;
    }
    int num = 0;

    for (int i = 1; i <= n; i++) {
        int j = i;
        while (j % 5 == 0) {
            j = j / 5;
            num++;
        }

    }

    cout << num << endl;
    return 0;
}