NC129:有关阶乘的两个问题1:
有关阶乘的两个问题1
http://www.nowcoder.com/questionTerminal/aa03dff18376454c9d2e359163bf44b8
思路:
每一对(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; } }
名企高频面试算法题解 文章被收录于专栏
牛客题霸 - 程序员面试高频题 - 题解