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;
    }

}
名企高频面试算法题解 文章被收录于专栏

牛客题霸 - 程序员面试高频题 - 题解

全部评论

相关推荐

11-02 09:49
已编辑
货拉拉_测试(实习员工)
热爱生活的仰泳鲈鱼求你们别卷了:没事楼主,有反转查看图片
点赞 评论 收藏
分享
10-15 09:13
已编辑
天津大学 soc前端设计
点赞 评论 收藏
分享
评论
3
收藏
分享
牛客网
牛客企业服务