黑马程序员技术交流社区

标题: 求1000!的结果中包含多少个0?注:1000! = 1×2×3×4×5×...×999×1000 [打印本页]

作者: chen_32768    时间: 2014-9-4 15:00
标题: 求1000!的结果中包含多少个0?注:1000! = 1×2×3×4×5×...×999×1000
网上搜了一些,单还是没太懂,这个的思路是用结果算0,还是用数学方法得出结果。

作者: The_king丶    时间: 2014-9-4 21:13
直接来也可以,刚刚做完这题。用math.bigInteger可以搞定这一题
作者: The_king丶    时间: 2014-9-4 21:15
  1. package com.itheima;

  2. import java.math.BigInteger;

  3. /**
  4. * 9、 求1000!的结果中包含多少个0?注:1000! = 1×2×3×4×5×...×999×1000
  5. *
  6. * 思路:1.因为求出1000!之后数值太大,需要使用math.BigInteger,可以解决大数问题。
  7. *     2.首先创建一个BigInteger对象,容纳计算结果。
  8. *     3.for循环循环相乘。(1*(1+1)*(1+1+1)····*1000)
  9. *     4.得出结果后,将BigInteger的对象用字符串表示。
  10. *     5.for循环,使用str.charAt(i)方法搜寻有多少个0,有的话count++。
  11. *     6.打印结果
  12. *
  13. */
  14. public class Test9 {
  15.   public static void main(String args[])
  16.   {
  17.           BigInteger result = new BigInteger("1");//新建一个值为1的BigInteger对象
  18.           int count = 0;//计数值为0
  19.           
  20.           for(int i = 2 ; i <=1000 ; i++)
  21.           {
  22.                   result = result.multiply(new BigInteger(i+""));//循环相乘,得出结果。
  23.           }
  24.           String str = result.toString();//将其变为string类型
  25.           
  26.           
  27.           for(int i = 0 ; i <str.length(); i++)//将结果(字符串)遍历一遍。
  28.           {
  29.                  if(str.charAt(i) == '0')//当有"0"时候,count++作为计数。
  30.           {
  31.                   count++;//计数,每有一个0就增加1.
  32.                   
  33.           }
  34.           }
  35.           
  36.           System.out.println(count);//输出结果。
  37.   }
  38. }
  39. //你可以看看这个代码

复制代码

作者: 15579171087    时间: 2014-9-4 23:33
The_king丶 发表于 2014-9-4 21:15

这是暴力求解呀。
作者: liuzhiyong0718    时间: 2014-9-4 23:39
不用想了,只能用结果来取
作者: 戏言丶    时间: 2014-9-4 23:50
以前看过大牛解的,你搜一下相关的帖子
作者: The_king丶    时间: 2014-9-5 08:35
15579171087 发表于 2014-9-4 23:33
这是暴力求解呀。

哈哈,不过更简便。有更好方法分享下吗?:P
作者: 菜鸟一号    时间: 2014-9-5 10:06
The_king丶 发表于 2014-9-4 21:15

牛B。。。。。。
作者: 踏云    时间: 2014-11-3 22:12
牛,好牛
作者: kongchuiting    时间: 2014-12-14 21:59
The_king丶 发表于 2014-9-4 21:15

思路很清楚,学习了
作者: 王晓杰    时间: 2014-12-20 15:01
很好 终于有个用我现在的知识可以看懂的了
作者: 王大侠    时间: 2015-4-19 15:03
真的是暴力,不解释啊!还有其他办法吗?
作者: 158803629    时间: 2015-7-15 09:42
好像只有这个办法吧  为什么要说人家暴力呢,谁说暴力的你来个不暴力的
作者: 158803629    时间: 2015-7-15 10:55
可以用                           
作者: xingui66    时间: 2015-7-31 10:27
很好的,可是我有个疑问:看基础题的时候,一头雾水,看完答案后,海阔天空,最后再做题,这质量会否会下降?让我本来就心虚的知识,更加没底气了:'(
作者: 树懒    时间: 2015-7-31 12:12
谢谢分享,看看了
作者: umbriel    时间: 2015-8-5 00:16
0的来源是5*2,将1000!中每个数都拆分成5*5···*2的形式,因为2的倍数远多于5的个数,故将所有书拆分为前述形式后5的总数就是1000!中0的数量
*/
package com.itheima;

public class Test9 {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                System.out.println("1000!中包含"+getZeroCount(1000)+"个0");
        }
        public static int getZeroCount(int num){
                int count=0;                                //定义计数器
                for(int i=5;i<=num;i+=5){        //由于计算0的个数只和5的数量有关,故每次i递增5
                        int temp=i;
                        while(temp%5==0){                //计算该数的质因数5的个数
                                count++;
                                temp=temp/5;
                        }               
                }
                return count;                                //返回值
        }
作者: 铿锵的小黑马    时间: 2015-8-7 21:35
好叼 ...
作者: sangyuan    时间: 2015-8-9 17:06
158803629 发表于 2015-7-15 09:42
好像只有这个办法吧  为什么要说人家暴力呢,谁说暴力的你来个不暴力的

大数问题,可以用暴力求解的方法来实现,此”暴力“非彼”暴力“ ,不过别人有了更简单的方法,不得不佩服! ! !
作者: pengbeilin    时间: 2015-8-12 11:18
umbriel 发表于 2015-8-5 00:16
0的来源是5*2,将1000!中每个数都拆分成5*5···*2的形式,因为2的倍数远多于5的个数,故将所有书拆分为 ...

这个牛,
作者: 叶子和大人    时间: 2015-10-24 12:05
感觉用2*5来得到0的个数不对,比如15!得到的是1307674368000,那么中间那个130的0怎么办,我用你的办法和用bigInteger得到的数值不一样,希望大家认真研究一下
作者: 从黑到白的马    时间: 2015-12-9 15:21
13有几个零,试一试!




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