前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode-172-Factorial Trailing Zeroes

leetcode-172-Factorial Trailing Zeroes

作者头像
chenjx85
发布2018-05-21 18:40:34
4590
发布2018-05-21 18:40:34
举报

题目描述:

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

Note: Your solution should be in logarithmic time complexity.

要完成的函数:

int trailingZeroes(int n) 

说明:

1、这道题目要求输出n!中从后面数起有多少个连续的0。时间复杂度要求是O(log)。

2、首先我们肯定不能直接计算,100!已经超过c++能处理的乘数范围了。所以我们只能仔细分析,看能不能找到一些数学规律,来统计有多少个连续的0。而且题目这种问法很明显就是要运用数学方法的。

3、经过计算,我们得到如下数据:

1!  1        0个0

2!  2     0个0

3!  6        0个0

4!  24      0个0

5!  120    1个0

6!  720    1个0

7!  5040     1个0

8!  40320     1个0

9!  362880      1个0

10!   3628800    2个0

11!     39916800     2个0

我们可以看到5!以前都是没有0的,直到24*5=120才出现了第一个0,后续再乘以6,乘以7,乘以8,乘以9都没有出现第二个0,直到乘以10再出现了第二个0。

乘以10会出现第二个0,归根结底是因为乘以了5。因为在n!中2都是充足的,只要出现了5就可以再添上一个0。

除了10=2*5之外,没有其他任何情况会生成10。

那这样子我们也可以统计出:

12!        2个0

13!        2个0

14!           2个0

15!        3个0         因为又乘以15=3*5,又添上一个0

似乎5的倍数都会添上一个0呢!

那20!       4个0    因为又乘以20=4*5,又添上一个0

25!        6个0         因为又乘以25=5*5,出现了2个5,所以又添上两个0

30!          7个0    因为又乘以30=6*5,又添上一个0

35!          8个0    因为又乘以35=7*5,又添上一个0

40!        9个0    因为又乘以40=8*5,又添上一个0

45!       10个0   因为又乘以45=9*5,又添上一个0

50!       12个0   因为又乘以50=2*5*5,又添上两个0

到这里,我们似乎可以总结出规律了,25!之所以会有6个0,是因为25/5=5,前面有5个5的间隔了(5、10、15、20、25),然后25=1*5*5,又出现一个5,所以加起来会有6个0.

50!之所以会有12个0,是因为50/5=10,前面有10个5的间隔了,然后50=2*5*5,有2个5,所以要再加上2。

75=3*5*5,所以会有18个0,75/5=15,再加上3个0,,构成18个0。

100=4*5*5,所以会有24个0,100/5=20,再加上4个0,构成24个0。

125=1*5*5*5,所以会有31个0,125/5=25,再加上5个0,再加上1个0,构成31个0。

所以对于每一个数,其实我们可以看一下,它除以5等于多少,result初始为0再加上这个数,然后这个数再除以5,看看等于多少,result再加上,然后这个数再除以5,result再加上……直到这个数最后为0。

代码如下。

代码:

代码语言:javascript
复制
int trailingZeroes(int n) 
{
        int result=0;
        while(n)
        {
            n/=5;
            result+=n;
        }
        return result;
}

非常简洁,时间复杂度也满足要求,beats 100% of cpp submissions。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-04-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 要完成的函数:
  • 说明:
  • 代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档