leetcode 172 阶乘后的0

又是一个数学问题,并且最关键的方面还是归纳出题目的思路。对于这一题而言,在数的尾部出现0,出现了2*5这一组合,第一个思路就是把阶乘看成很多个数的因子相乘的过程,然后计算2和5的个数,这种思路可以继续优化,基于2的个数远大于5这一事实,我们只计算5的个数同样可以完成问题。之后需要解决的则是类似与25,125这一类数如何处理的问题,这则可以通过将n不断除以5的方式解决,比如第一次除以5后得到的是因子5的个数,而再次除以5之后得到的是因子25的个数,同时,因子25为5*5,其中有一个5已经在第一步计算中考虑在内了,所以可以将第二步的结果加入计数中,之后则继续除以5,思路也是类似的,贴代码

class Solution {
public:
    int trailingZeroes(int n) 
    {
        int count = 0;
        while(n>0)
        {
            count += n/5;
            n/=5;
        } 
        return count;    
    }
};

 

posted @ 2021-09-03 15:33  zhaohhhh  阅读(33)  评论(0)    收藏  举报