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; }