A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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. }
复制代码





11 个回复

倒序浏览
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.  
回复 使用道具 举报
楼上让我茅塞顿开啊。
回复 使用道具 举报
注意审题呗,结果包含0跟结尾包含0是不一样的
回复 使用道具 举报
249个的是末尾连续0的个数,472的是所有的0的个数,因为前面也产生0
回复 使用道具 举报
怀念子龙 发表于 2015-4-3 08:48
public class T1 {
       
        public static void main(String[] args) {

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

7的阶乘是5040,有两个零啊,你这个算法是判断末尾有多少个连续的零吧??
回复 使用道具 举报
P李勇 发表于 2015-4-3 10:08
你用计算器算一下7的阶乘有几个零

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

。。。。。没看清题目。我的。
回复 使用道具 举报
shenzf 发表于 2015-4-3 09:56
注意审题呗,结果包含0跟结尾包含0是不一样的

。。。没看清题目。我的问题
回复 使用道具 举报
怀念子龙 发表于 2015-4-3 08:48
public class T1 {
       
        public static void main(String[] args) {

有多少个5是怎么算的?求大神解释。。。

点评

我知道了。。包含一个5的数算一次,包含两个5的数算两次。。这样对吧  发表于 2015-4-3 11:39
回复 使用道具 举报
怀念子龙 发表于 2015-4-3 08:48
public class T1 {
       
        public static void main(String[] args) {

不对吧。应该是0和5个个数有多少个,但是你只能确定结尾处有多少个零 ,如果中间有零呢
回复 使用道具 举报
求末尾0很简单,上面已经有人给出代码了。求所有0,一是用BigDecimal类直接算。二是用乘法规则一步步算。第二种方法可参考:http://bbs.itheima.com/thread-133474-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马