• 计算出n阶乘中尾部零的个数


    题目: 设计一个算法,计算出n阶乘中尾部零的个数 

    例子: 
    
    输入:  6
    输出:  1
        
    样例解释:
    6! = 720, 结尾的0有1个。

    思路:

    最简单暴力的方法就是直接把数的阶乘计算出来,然后数这个末尾有几个0。

    public long trailingZeros(long n) {
            long result = 1l;
            for (long i = 1; i <= n; i++) {
                result = i * result;
            }
            String resultStr = result + "";
            int index = resultStr.length() - 1;
            int zeroNumber = 0;
            while (resultStr.charAt(index) == '0') {
                zeroNumber++;
                index--;
            }
            return zeroNumber;
        }

    延伸:

    在小数的阶乘时上面的暴力法一点问题没有。但当是大数时,阶乘就会出现问题,计算量和内存都会浪费很多。

    那我们是否有更优雅的方式呢?

    我们寻找其中的规律可以发现,0的产生是和2和5有关的,为什么不是4和5、8和5,因为2和5是最小不能再小的相关数字。那实际上我们只需要计算有多少个5就可以得到结果了。

    代码如下:

    public long trailingZeros(long n) {
            long sum = 0;
            while (n != 0) {
                sum += n / 5;
                n /= 5;
            }
            return sum;
        }
  • 相关阅读:
    BZOJ1208
    BZOJ1024
    BZOJ_day4&&DSFZ_day1
    BZOJ day2_plus
    BZOJ day2
    系统设计2:数据库设计
    设计模式8:外观模式
    系统设计1:概述
    设计模式7:模板方法模式
    九章算法班ladder题目梳理
  • 原文地址:https://www.cnblogs.com/zh-ch/p/13036652.html
Copyright © 2020-2023  润新知