尾部的零_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 尾部的零

尾部的零

 2017/11/16 1:03:24  陶永攀  程序员俱乐部  我要评论(0)
  • 摘要:设计一个算法,计算出n阶乘中尾部零的个数您在真实的面试中是否遇到过这个题?Yes样例11!=39916800,因此应该返回2题目地址这一题,看着很水,但是要是没有做过的话,也会遇到很多的坑,我就是这样(难受),这道题虽然非常简单,但是非常的考察人,第一种算法就是最low,最暴力的方法,简单粗暴的计算能被分解的5的个数:publicstaticlongnum(longn){if(n<5){return0;}longnum=0;for(longi=5;i<=n;i++){longt=i
  • 标签:

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

class="text-sm" style="font-size: 12px;">您在真实的面试中是否遇到过这个题?? Yes 样例

11! = 39916800,因此应该返回 2

?

?

题目地址 这一题,看着很水,但是要是没有做过的话,也会?遇到很多的坑,我就是这样(难受),这道题虽然非常简单,但是非常的考察人,第一种算法就是最low,最暴力的方法,简单粗暴的计算能被分解的5的个数:
public static long num(long n){

        if (n < 5){
            return 0;
        }
        long num = 0;
        for (long i = 5;i <= n;i++){
            long t = i;
            while (t%10==0&&t!=0){
                num++;
                t = t/10;
            }

            while (t%5 == 0&&t!=0){
                num++;
                t = t/5;
            }
        }
        return num;
    }
?这种算法的复杂度是0(n),很明显?超时了; 我就想要是我把每次的步数调整为5那时间复杂度不就是O(n)/5
public static long num(long n){

        if (n < 5){
            return 0;
        }
        long num = 0;
        for (long i = 5;i <= n;i+=5){
            long t = i;
            while (t%10==0&&t!=0){
                num++;
                t = t/10;
            }

            while (t%5 == 0&&t!=0){
                num++;
                t = t/5;
            }
        }
        return num;
    }
?可是我又天真了,还是超时,因为O(n)约等于O(n)/5; 最后参考了一下某网友的方法如下:
    public static long num(long n){
         long num = 0;
         long t = n/5;
         while (t!=0){
             num+=t;
             t = t/5;
        }
        return num;
    }
?这个算法的时间复杂度为O(n); 我又写了下面同样?复杂度的方法:
    public static long num(long n){
          long num = 0;
          while (n!=0){
              long t = n/5;
              num+=t;
              n = n/5;
        }
        return num;
    }
?
上一篇: A+B问题 下一篇: 没有下一篇了!
  • 相关文章
发表评论
用户名: 匿名