黑马程序员技术交流社区

标题: 求1000!的结果中包含多少个0? [打印本页]

作者: 从黑到白的马    时间: 2015-12-9 23:10
标题: 求1000!的结果中包含多少个0?

求1000!的结果中包含多少个0?注:1000! = 1×2×3×4×5×...×999×1000
import java.math.BigInteger;
* 思路: 若想得到结果中数字0的个数,就要求出1000!的结果,然后转换成字符串用String类中的方法进行求解,
* 但是1000!的结果会超出我们基本数据类型的范围。于是就想到BigInteger类,在此利用BigInteger类的
*方法来求解
public class Test9 {
        public static void main(String[] args) {
                printNum();
        }

        public static void printNum() {
               
                //创建BigInteger对象并初始化传入字符串1.
                BigInteger bi = new BigInteger("1");
               
                //for循环求1000!的结果
                for (int i = 2; i <= 1000; i++) {
                        //把每个int类型的数据转换成字符串
                        String str = String.valueOf(i);
                        //把字符串类型数据转换成BigInteger类型
                        BigInteger bi2 = new BigInteger(str);
                        //利用multiply()求积
                        bi=bi.multiply(bi2);
                }
                //把结果转换成字符串类型的数据
                String end = bi.toString();
                //定义计数器
                int count = 0;
                //for循环遍历字符串
                for (int i = 0; i <end.length(); i++) {
                        //没出现一次0,计数器就增加1
                        if (end.charAt(i) =='0') {
                                count++;
                        }
                }
                //打印输出结果
                System.out.println("1000!的结果中包含"+count+"个0.");
        }
}


作者: zsn888    时间: 2015-12-10 03:18
我怎么看不大明白啊,哎!
作者: 从黑到白的马    时间: 2015-12-10 15:27
zsn888 发表于 2015-12-10 03:18
我怎么看不大明白啊,哎!

j就中间那一部分恩难理解点   你可以查查api
作者: 星晴。    时间: 2015-12-10 17:11
这个平时练习时做过,还有求结果的尾部包含多少个零。
作者: 从黑到白的马    时间: 2015-12-10 18:17
星晴。 发表于 2015-12-10 17:11
这个平时练习时做过,还有求结果的尾部包含多少个零。

BigInteger的应用
作者: Myth、骞    时间: 2015-12-10 21:25
能告诉我题目怎么找来的吗? 我想多做做,练习练习
作者: hyl    时间: 2015-12-10 21:36
要调用API
作者: 从黑到白的马    时间: 2015-12-11 09:55
Myth、骞 发表于 2015-12-10 21:25
能告诉我题目怎么找来的吗? 我想多做做,练习练习

黑马的题    我就几道题
作者: 星晴。    时间: 2015-12-12 23:13
从黑到白的马 发表于 2015-12-10 18:17
BigInteger的应用

阶乘的部分可以用递归做
作者: 744919632    时间: 2015-12-13 00:32
阶乘,老师又讲过的,用递归。

代码实现:
package cn.zhangeng.ceshi;

import java.math.BigInteger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/*
* 求1000!的结果中包含多少个0
* 1000! = 1×2×3×4×5×...×999×1000
*/
public class Test8 {

        public static void main(String ars[]) {
                Test8 test8 = new Test8();
                test8.jieCheng(1000);
        }
        //将阶乘的数学运算原理封装成对象
        public void jieCheng(int number) {
                //创建一个大数对象
                BigInteger res = new BigInteger("1");
                //利用循环计算1000!的值
                for (int i = 1; i <= number; i++) {
                        BigInteger num = new BigInteger(String.valueOf(i));
                        // 相当于res * = num;,但是大数不是基本数据类型,不能使用*运算符,用独有的方法
                        res = res.multiply(num);
                }
                //将获得的值转成字符串
                String str = res.toString();
                //调用方法,获取res中一共有多少个0
                int zeroNum = zeroNum(str);
                //输出结果
               // System.out.println(number + "的阶乘为:" + "\n" + str);
                System.out.println(number + "的阶乘中所有的0的个数:" + zeroNum);
        }

        // 求阶乘结果所有的0的个数
        public int zeroNum(String str) {
                int count = 0;
                String regex = "0";
                Pattern p = Pattern.compile(regex);
                Matcher m = p.matcher(str);
                while (m.find()) {
                        count++;
                }
                return count;
        }
}

作者: 从黑到白的马    时间: 2015-12-13 08:27
744919632 发表于 2015-12-13 00:32
阶乘,老师又讲过的,用递归。

代码实现:

不错哦,思路非常清晰
作者: sky123    时间: 2015-12-13 19:18
嗯,路过来看看,共同加油吧
作者: a54267490    时间: 2015-12-13 19:28
哎 ,看了半天没懂,我们还没学到递归




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