黑马程序员技术交流社区

标题: 一个疑问之1000!结果包含0的个数 [打印本页]

作者: P李勇    时间: 2015-4-3 02:18
标题: 一个疑问之1000!结果包含0的个数
本帖最后由 P李勇 于 2015-4-3 02:25 编辑

求1000!的结果中包含多少个0
1000! = 1×2×3×4×5×...×999×1000
为什么我算的结果是472个???
我看网上说的都是249个???why??
  1. public class Test9 {
  2.         public static void main(String[] args) {
  3.                 BigInteger big = BigInteger.valueOf(1);// 创建一个BigInteger类型
  4.                 for (int i = 1; i <= 1000; i++) {// 循环计算1000!
  5.                         big = big.multiply(BigInteger.valueOf(i));
  6.                 }
  7.                 String tmp = big.toString();// 将BigInteger 转换为String类型
  8.                 int counter = 0;// 创建计数器
  9.                 StringBuilder str = new StringBuilder();
  10.                 for (int i = 0; i < tmp.length(); i++) {
  11.                         if (tmp.charAt(i) == '0') {
  12.                                 str.append(tmp.charAt(i));
  13.                                 counter++;
  14.                         }
  15.   }
  16.                 System.out.println(str.length());//返回长度472
  17.                 System.out.println(counter);//返回counter值472
  18.                 System.out.println(tmp);//tmp的值
  19.         }
  20. }
复制代码






作者: 怀念子龙    时间: 2015-4-3 08:48
public class T1 {
       
        public static void main(String[] args) {
               
                int a=0;
                for(int i=5;i<=1000;i=i*5)
                {
                        a+=1000/i;
                }
                System.out.println(a);       
    }
}

用素数去理解嘛。1000个数相乘可以将每个数分解成素数相乘,素数2和素数5相乘就可以得到一个0,又因为2的个数肯定比5多,所以算有多少个0的问题就转换成算有多少个5.  

作者: 胡几手    时间: 2015-4-3 09:15
楼上让我茅塞顿开啊。
作者: shenzf    时间: 2015-4-3 09:56
注意审题呗,结果包含0跟结尾包含0是不一样的
作者: dxf578939729    时间: 2015-4-3 10:02
249个的是末尾连续0的个数,472的是所有的0的个数,因为前面也产生0
作者: P李勇    时间: 2015-4-3 10:08
怀念子龙 发表于 2015-4-3 08:48
public class T1 {
       
        public static void main(String[] args) {

你用计算器算一下7的阶乘有几个零

7的阶乘是5040,有两个零啊,你这个算法是判断末尾有多少个连续的零吧??
作者: 怀念子龙    时间: 2015-4-3 10:13
P李勇 发表于 2015-4-3 10:08
你用计算器算一下7的阶乘有几个零

7的阶乘是5040,有两个零啊,你这个算法是判断末尾有多少个连续的零吧 ...

。。。。。没看清题目。我的。
作者: 怀念子龙    时间: 2015-4-3 10:14
shenzf 发表于 2015-4-3 09:56
注意审题呗,结果包含0跟结尾包含0是不一样的

。。。没看清题目。我的问题
作者: 剑雨飘扬    时间: 2015-4-3 11:23
怀念子龙 发表于 2015-4-3 08:48
public class T1 {
       
        public static void main(String[] args) {

有多少个5是怎么算的?求大神解释。。。
作者: 突然世界晴    时间: 2015-4-3 12:15
怀念子龙 发表于 2015-4-3 08:48
public class T1 {
       
        public static void main(String[] args) {

不对吧。应该是0和5个个数有多少个,但是你只能确定结尾处有多少个零 ,如果中间有零呢
作者: fantacyleo    时间: 2015-4-3 13:58
求末尾0很简单,上面已经有人给出代码了。求所有0,一是用BigDecimal类直接算。二是用乘法规则一步步算。第二种方法可参考:http://bbs.itheima.com/thread-133474-1-1.html




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