一个数的阶乘结果尾部会有多少个0?

9 篇文章 0 订阅
2 篇文章 0 订阅

一个数的阶乘结果尾部会有多少个0?

    这个只是个稍微有点意思的面试题,亦或者是笔试题!
    很多人下意识就会想到,我们先把这个阶乘的结果计算出来,然后看一下末尾有多少个0不就行了吗?但是阶乘的结果一般会比较大,很容易就会越界的,所以这个方法是不可行的。
    首先,我们拿到这个问题的第一个想法,0是哪里来的?这个0肯定是0*5得来的。那么问题就归结于有多少对2和5。经过简单的思考我们就可以得出这里面肯定是5的个数少一些。那么这个问题就转化了呀!就转化成了从1到这个数的这个数列。里面一共有多少个因子5。
    那么我们首先将从1到n这个数列列一下!1,2,3,4,5,6,7,8,9,10,11,12 …….n。如果这个数可以提供5这个因子那么就说明这个数一定是5的倍数。所有可以被5整除的可以提供一个5。所有可以被25整除的都可以提供2个5。那么计算5的个数也就简单了。
    我们计算的时候,一直到5m>n,就可以了。因为所有可以被25整除的都是可以被5整除的所以计算过一次了。所以25提供的2个5已经被计算过一次了。
     结果sum=n/5 + n/52 + n/53 + …… + n/5m
    那么代码也就很好写了吧!

package example;

public class ZeroEndOfNumber {
    public static void main(String[] args) {
        int test = test(10);
        System.out.println("test = " + test);
    }

    public static int test(int n){
        if(n < 0){
            return  0;
        }
        int res = 0;
        while (n !=0){
            res += n /5;
            n = n/5;
        }
        return res;
    }
}

这个关于阶乘的结果尾部有多少个0的问题就也就解决了呀!问题不是很难,方法也不只这一个,欢迎交流!然后最后就是GitHub地址了:https://github.com/yunzhifei/mavenalgorithm.git

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值