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;
}
}名企高频面试算法题解 文章被收录于专栏
牛客题霸 - 程序员面试高频题 - 题解

联想公司福利 1548人发布