题目描述:
计算n!的十进制表示最后有多少个0
输入描述:
第一行输入一个整数N表示测试数据的组数(1<=N<=100)
每组测试数据占一行,都只有一个整数M(0<=M<=10000000)
输出描述:
输出M的阶乘的十进制表示中最后0的个数
比如5!=120则最后的0的个数为1
样例输入:
6
3
60
100
1024
23456
8735373
样例输出:
0
14
24
253
5861
2183837
一看到阶乘,我最先想到的就是用高精度做,然后看到数据很大,不好实现,其实这就是一个数学思路问题,题目让我们求的是n的阶乘最后有多少个0,我们可以倒回去想,这些0是怎么来的,现在就很容易想到肯定和5有关,5乘以一个偶数,就会得到0,又因为偶数的个数肯定比5的个数出现的多,所以我们就只需要确定5的个数就好了。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 100010
#define ll long long
#define inf 0x3f3f3f3f
int f(int n)
{
if(n<5) return 0;
return n/5+f(n/5);
}
int main() {
int t,n;
cin>>t;
while(t--)
{
cin>>n;
cout<<f(n)<<endl;
}
return 0;
}