黑马程序员技术交流社区

标题: 求助!!! [打印本页]

作者: ╰_〃无法释怀的    时间: 2014-7-6 10:05
标题: 求助!!!
1000!里面包含多少个0   1000!1x2x3x4x5x6x7.......x1000这道题结果是有多少个0,怎么算帮忙说下思路
作者: 自闭宅男    时间: 2014-7-6 22:15
·······························
作者: 普哥    时间: 2014-7-6 22:19
        // 解题思路:一个数 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);

    }

}

作者: hmid    时间: 2014-7-6 22:28
楼上的没错。
作者: 人心如水    时间: 2014-7-7 00:40
我写的 ,自己看看就明白了
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 ;
                }
}
作者: 郑飞    时间: 2014-7-7 02:31
我的题目是整个结果包含多少0 想了半天想不出来怎么破




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