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


京公网安备 11010502036488号