黑马程序员技术交流社区

标题: 关于N的阶乘末尾有多少个0的小程序一枚 [打印本页]

作者: 曹冬明    时间: 2014-4-16 02:10
标题: 关于N的阶乘末尾有多少个0的小程序一枚
本帖最后由 曹冬明 于 2014-4-16 13:06 编辑
  1.         public static int getCount(int n)
  2.         {
  3.                 int count = 0;
  4.                 for (int i=1;Math.pow(5,i)<=n;i++ )
  5.                 {
  6.                         count+=n/Math.pow(5,i);
  7.                 }
  8.                 return count;
  9.         }
复制代码

作者: 水竹    时间: 2014-4-16 12:05
验证一下25!
作者: 曹冬明    时间: 2014-4-16 12:57
水竹 发表于 2014-4-16 12:05
验证一下25!

5个有问题么,我说的是末尾哦
作者: 水竹    时间: 2014-4-16 13:01
本帖最后由 水竹 于 2014-4-16 13:05 编辑

25=5*5,有两个五,显然应该比24!多了两个。而且这个应该很好想吧,几个零就代表着能被十的几次方整除,而十分解质因数就是2*5,2的话肯定有很多,每个偶数都会提供一个2的因子,5的话一共就那么几个——5、10、15、20、25算两个,加起来不是6个零么。

作者: 曹冬明    时间: 2014-4-16 13:06
水竹 发表于 2014-4-16 13:01
25=5*5,有两个五,显然应该比24!多了两个。而且这个应该很好想吧,几个零就代表着能被十的几次方整除,而 ...

哦,抱歉,我少写了个等号,才会有这种结果
作者: 水竹    时间: 2014-4-16 13:10
呃,报什么歉,笔误而已嘛
作者: 杨庆雷    时间: 2014-4-16 13:26
本帖最后由 杨庆雷 于 2014-4-16 14:12 编辑

public static int getCount(int n)
        {
                int count = 0;
                for (int i=1;i <= (int)(n/5);i++ )
                {
                        count = count + (int)(n/ Math.pow(5,i) ) ;
                }
                return count;
        }
思想:一个数的阶乘 包括多少个 5 或者 0 那么结果的结尾就有多少个0
比如说 10的阶乘   1*2*...*9*10  中间包括 5和10  那么结尾有两个0
            15的阶乘  1*2*3*4...*14*15   中间包括 5,10,15  那么结尾有三个0  
            16的阶乘  1*2*3*4...*14*15*16    中间包括 5,10,15  那么也是结尾有三个0  



作者: 曹冬明    时间: 2014-4-16 13:32
杨庆雷 发表于 2014-4-16 13:26
public static int getCount(int n)
        {
                int count = 0;

按照你的思想25的阶乘:5,10,15,20,25,5个0呗,你计算过25和24相乘就会产生两个0,你怎么秒杀的一切
作者: 杨庆雷    时间: 2014-4-16 13:40
曹冬明 发表于 2014-4-16 13:32
按照你的思想25的阶乘:5,10,15,20,25,5个0呗,你计算过25和24相乘就会产生两个0,你怎么秒杀的一切 ...

难道 25 的阶乘 就是  25*24 么  难道不是
1* 2*3*4*...*25么
作者: 曹冬明    时间: 2014-4-16 13:43
杨庆雷 发表于 2014-4-16 13:40
难道 25 的阶乘 就是  25*24 么  难道不是
1* 2*3*4*...*25么

你还是没懂 啊,2*5产生一个0,4乘15产生一个0,24乘25产生两个0,10乘20产生两个0,加在一起是几个0,你算算
作者: 杨庆雷    时间: 2014-4-16 14:10
没考虑那么多  我上面修改了一下  应该行了
作者: 杨庆雷    时间: 2014-4-16 14:11
曹冬明 发表于 2014-4-16 13:43
你还是没懂 啊,2*5产生一个0,4乘15产生一个0,24乘25产生两个0,10乘20产生两个0,加在一起是几个0,你 ...


没考虑那么多  我上面修改了一下  应该行了
作者: 杨庆雷    时间: 2014-4-16 14:15
曹冬明 发表于 2014-4-16 13:43
你还是没懂 啊,2*5产生一个0,4乘15产生一个0,24乘25产生两个0,10乘20产生两个0,加在一起是几个0,你 ...

我觉得 再改改 就跟LZ的一样了
作者: 曹冬明    时间: 2014-4-16 14:19
杨庆雷 发表于 2014-4-16 14:15
我觉得 再改改 就跟LZ的一样了

你之前那种方法,都没必要写成那样,直接return n/5就完了被,你不就是看n里都多少个5么
作者: 杨庆雷    时间: 2014-4-16 14:41
冬明哥  学习了    你要去哪期啊
作者: 曹冬明    时间: 2014-4-16 15:24
杨庆雷 发表于 2014-4-16 14:41
冬明哥  学习了    你要去哪期啊

我也不知道啊,赶上哪期算哪期被




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2