leetcode[172] Factorial Trailing Zeroes

Given an integer n, return the number of trailing zeroes in n!.

给定n,求n!的末尾有几个零。

能组成零的末尾的莫过于2*5,和本身就是0结尾的,如10,20,。。。可以注意到以0结尾的也是可以分解成2*5的,所以目标就转化为求几个2*5因子了,又注意到,明显的5的因子个数比2的个数要少,例如n为6的时候只有一个5,但是仅仅4中就有两个2了。所以又转化为求5的个数就行了。

因为5是每隔5出现一次,所以n除以5就是总共有几个含5的因子数了?是吗,其实25中有两个5,这样的话只算了一个5,还有一个漏掉了。

所以你还要除以25,计算有几个25,依次类推还要125,625,。。。,知道5^k > n 为止。

注意到 n/25 = n/5 /5, n/125 = n/25 /5,..., 所以我们可以每次都用/5,只是将n的值每次/5赋值就可。

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

 

转载于:https://www.cnblogs.com/higerzhang/p/4223248.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值