lintcode2

作者: 小时候浪死了 | 来源:发表于2018-08-25 15:45 被阅读0次

描述

设计一个算法,计算出n阶乘中尾部零的个数
样例
11! = 39916800,因此应该返回 2
挑战
O(logN)的时间复杂度

解1:

主要求出5的幂次次数,如25的阶乘,有5   2*5  3*5 4*5 5*5   则5的幂次次数为6,即尾部零的个数为6
因为偶数*5就会尾部就可以产生零,而偶数出现的比5出现的次数一定多,比如3!=3*2*1   6!=6*5*4*3*2*1,所以值考虑5出现的次数就好,除此之外还要加上10出现的次数。
class Solution {
public:
    long long trailingZeros(long long n) {
       long long sum = 0;
        for (long long  temp = 5; temp <= n; temp+=5) 
        {
            count++;
            long long pwr = 25;
            // 判断是不是25、125、625...的倍数,并根据每次pwr的变化进行+1操作
            while (temp % pwr == 0)
             {
                count++;
                pwr *= 5;
             }
          }
                return count;
        }
};

解2:

某个数的阶乘(如101),我要提取5,10,15,20,25……100  
即5*(1*2*3*4*5.......*20)
sum=101/5;  //(sum是零的个数和)
而(1*2*3*4*5.......*20)又可以重复上述步骤5*(1*2*3*4)
sum=sum+101/5/5;
long long sum=0;
long long tmp=n/5;
while(tmp!=0)
{
    sum+=tmp;
    tmp/=5;
}

相关文章

  • lintcode2

    描述 设计一个算法,计算出n阶乘中尾部零的个数样例11! = 39916800,因此应该返回 2挑战O(logN)...

  • Lintcode2 Trailing Zeros solutio

    【题目描述】 Write an algorithm which computes the number of tr...

  • Lintcode2 Trailing Zeros solutio

    【题目描述】 Write an algorithm which computes the number of tr...

  • 2019-03-08 lintcode2

    二叉树路径遍历 输出所有根节点到叶子节点的路径找出所有路径中相加总和等于给定值的路径 数据结构 链表:遍历、增加、...

网友评论

      本文标题:lintcode2

      本文链接:https://www.haomeiwen.com/subject/xgcviftx.html