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

    今天在领扣看到了一个算法题,题目是这样的:


领扣算法题

       乍一看感觉还是蛮简单的,但是实际操作起来却没那么容易,也看了网上有关这道题的解释,几乎没有能彻底说明白的。经过我的研究终于搞清楚了所以就想给大家带来一篇真正能够让大家浅显易懂的解释。按照我们正常的思路(也许只是我的思路,估计你们会有更好的,嘻嘻),显示算出阶乘的结果,然后再将结果分割成数组,从后遍历直到不是0为止。最后统计一下遍历出0的个数就搞定了。但是我们做题还是想做完整一点(起码有强迫症的我是这样的,嘿嘿)题目挑战要求我们需要实现O(logN)的时间复杂度。如果按照我们之前的思路肯定要用到循环遍历,如果这样就肯定不是O(logN)的时间复杂度了。

        有些童鞋可能要问到什么是时间复杂度?本来是想给大家详细解说一番的,单本文章主要讨论的这道算法题的解法。希望小伙伴们在看本文章前先去查阅一下有关时间复杂度的概念,这样会对本文章的理解会更深的哦!

        我们言归正传,题目说要计算N阶乘尾部0的个数。那么有些小伙伴就要问了:“既然你说用循环不符合要求,那我我们怎么去算阶乘呢?”。但是你有没有想到做这道题根本不用去计算阶乘呢?这就需要我们研究数字末尾的0到底是如何产生的。

                举个例子来说:1200=12*10*10,也就是说1200尾部的0是由两个10产生的,那么10又是由谁产生的呢?

                10=2*5

                可以说10是由2和5产生的,但是我们继续看:

                20=2*2*5;30=2*3*5;40=2*2*2*5······

                可以发现随着10位数越大里面2增加越多,而5增加的却很慢。所以我们可以大致的理解为10是由5产生的。

                一个数字后面有几个0那么它的因数就有几个10(这个不用我再啰嗦了,大家自行领会)

        那我们再说阶乘,先拿75的阶乘来说吧:

          75!=1*2*3*4*5*6*7*8*9*10*...*75

            想知道结果末尾有几个0,首先得知道从1乘到105一个产生了几个10,上面我们说的10是由5产生的(5*一个偶数),那么从以1开始每5个数就会至少产生一个10,如下图所示:


            我们从1-75中筛选出了能够产生10的15个数字(它们都是5的倍数都包含了5)

            按照以上方法每5个数又会产生一个5来进行第二次筛选,我们可以从中看到25,50,75是可以产生两个5的 ,也就说能产生两个10,如图:

          我们又从中筛选了出了3个数字(说白了这三个数字就是能够产生两个5的另一个5,第一个5在第一次筛选就已经刨去了),到现在为止,所有的5我们已经全部找出,第一次筛选的15个加上第二次的3个,一共18个,也就是说75的阶乘末尾有18个0.

        按照以上的方法,我们大致就有了一个思路了,给定一个数的阶乘,用这个数不断地除以5,直到结果为0为止。把每次得数相加就是最终的

结果(如果在除的过程中产生余数,将余数忽略,只取整数部分)。

        本人是搞前端开发的,所以用JS实现了这个功能,如图:

大家如果有问题可以私信我,发现文章中出现的问题也可以提出来。写这么多也难免会出现错误,嘿嘿嘿。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容