思路:
每一对(2,5)就会产生一个0,将问题转换为:n!有多少对(2,5)
进一步将问题简化为:
n!拆分成的因子中有多少个5(为什么是5,不是2,是因为2出现的频率比5高)
解法1:效率低,时间复杂度为N*logN
public static int zeroNum1(int num){ if(num<5){ return 0; } int res=0; int cur=0; for(int i=5;i<=num;i=i+5){ cur=i; while(cur%5==0){ res++; cur=cur/5; } } return res; }
解法2:注意: long m=sc.nextLong();
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc=new Scanner(System.in); long m=sc.nextLong(); System.out.print(zeroNum2(m)); } public static long zeroNum2(long num){ if(num<1){ return 0; } long res=0; while(num!=0){ res=res+num/5; num=num/5; } return res; } }