import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
int ans = 0;
while (n != 0) {
ans += n/=5;//*****一条语句计算0的个数
}
System.out.println(ans);
}
}
这题怎么写?
首先我们如果知道N!由于10 = 2*5 所以N!其中2的次数和5的次数 那么这两者中最小的就是解 但是很难在一条语句循环求出来
最后发现 一定是5的次数小于2的次数 那么我们只需要计算出5的次数即可
开始想要每次在这个语句中N不断-1 然后求一下log5N 但是不好在一条语句中实现、
我们知道一个数必然等于2^a*3^b*5^c……
那么我们如果用n/5就可以知道n中有多少个5的倍数 可是这只是因子中有5^1的个数 我们需要再加上5^2的个数,那么因子中有5^1的数中必然有5^2的数 也就是两部分数字有交集 即解为N
N!=1*2*……*n
N!中0的个数取决与10的因子个数
N!中的10因子个数取决于min(2因子个数,5因子个数)
min(2因子个数,5因子个数)取决于5因子个数
N!中0的个数取决于5的个数
其中5的因子个数取决与有多少个5的一次倍数 5的二次倍数 5的三次倍数...5的n次倍数的加和(5^n<=N!)
即N!中存在