给定一个非负整数N,返回N!结果的末尾为0的数量
每一对(2,5)就会产生一个0,将问题转换为:n!有多少对(2,5) 进一步将问题简化为:n!拆分成的因子中有多少个5(为什么是5,不是2,是因为2出现的频率比5高)
出现5,一定能足够的2来配对,所以只需要知道1-n这n个数中,含有多少个因子5 举例说明: N=20,Z=20/5 + 20/25 = 4,20/5可理解为20,15,10,5这四个数每个都提供了一个5 N=25,Z=25/5 + 25/25 +25/125 = 6,25/5可理解为:25,20,15,10,5这五个数每个都提供了一个5,25/25可理解为:25 = 5*5,在25/5中提供了一个5,在25/25中又提供了一个5,即25提供了两个5 同样的125=5*5*5,125可提供三个5
import java.util.*; public class Main { public static Scanner sc = new Scanner(System.in); // 时间复杂度 O(logn) static long numOfZero(long n){ long num = 0; long i = 5; while (n > 0){ num += n / i; n = n / i; } return num; } public static void main(String[] args) { long n = sc.nextLong(); System.out.println(numOfZero(n)); } }