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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ╰_〃无法释怀的 中级黑马   /  2014-7-6 10:05  /  1398 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1000!里面包含多少个0   1000!1x2x3x4x5x6x7.......x1000这道题结果是有多少个0,怎么算帮忙说下思路

5 个回复

正序浏览
我的题目是整个结果包含多少0 想了半天想不出来怎么破
回复 使用道具 举报
我写的 ,自己看看就明白了
package com.itheima;

import java.math.BigInteger;


/*
* 思路,打印出结果,把结果每个整数单位转换为数组元素,然后遍历,出现0计数一次。
*/
public class Test9 {
                public static void main(String[] args){
                        //因为1000!太大了,必须引入BigInteger类,建立对象并赋值为1
                        BigInteger sum = BigInteger.valueOf(1);
                        //调用下面的方法,得到sum的值
                        sum = factorial(sum);
                        //通过下面的方法获取结果中0的个数
                        System.out.println(getZeros(sum.toString()));
                }
                private  static BigInteger factorial(BigInteger sum){// 1000!
                                for(int i=1;i<1001;i++){
                                        //这里注意:i的类型必须转换,纠错了半天(***)
                                                sum = sum.multiply(BigInteger.valueOf(i));
                                }
                                //这里已经获取到了sum的值,是个BigInteger类型
                        return sum;
                }
                //获取0个数的方法
                private static int  getZeros(String str){//get zeros
                        //利用split方法將字符串以"0"切割,转换为字符串数组
                        String[] split = str.split("0");
                        int size = 0;
                        //高级for循环完成遍历出非0的长度
                        for (String string : split) {
                                size = size + string.length();
                        }
                        //返回0的个数
                        return str.length() - size ;
                }
}
回复 使用道具 举报
楼上的没错。
回复 使用道具 举报
        // 解题思路:一个数 n 的阶乘末尾有多少个 0 取决于从 1 到 n 的各个数的因子中 2 和 5 的个数, 而 2 的个数是远远多余 5
        // 的个数的, 因此求出 5 的个数即可。
public static void main(String[] args) {

        int count_2 = 0;// 被2整除的次数之和
       
        int count_5 = 0;// 被5整除的次数之和

        // 遍历所有的数
        for (int i = 1; i <= 1000; i++) {
            
         // i用于控制循环的次数,而j用来整除
            int j = i;
            
         // 统计该数能被2整除的个数
            while (j % 2 == 0) {
                count_2++;
                j /= 2;
            }
            
         // 统计该数能被5整除的个数
            while (j % 5 == 0) {
                count_5++;
                j /= 5;
            }
        }

        System.out.println("结尾0的个数为:" +count_5);

    }

}
回复 使用道具 举报
·······························
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马