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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


求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.");
        }
}

12 个回复

倒序浏览
我怎么看不大明白啊,哎!
回复 使用道具 举报
zsn888 发表于 2015-12-10 03:18
我怎么看不大明白啊,哎!

j就中间那一部分恩难理解点   你可以查查api
回复 使用道具 举报
星晴。 来自手机 中级黑马 2015-12-10 17:11:39
板凳
这个平时练习时做过,还有求结果的尾部包含多少个零。
回复 使用道具 举报
星晴。 发表于 2015-12-10 17:11
这个平时练习时做过,还有求结果的尾部包含多少个零。

BigInteger的应用
回复 使用道具 举报
能告诉我题目怎么找来的吗? 我想多做做,练习练习
回复 使用道具 举报
hyl 中级黑马 2015-12-10 21:36:19
7#
要调用API
回复 使用道具 举报
Myth、骞 发表于 2015-12-10 21:25
能告诉我题目怎么找来的吗? 我想多做做,练习练习

黑马的题    我就几道题
回复 使用道具 举报

阶乘的部分可以用递归做
回复 使用道具 举报
阶乘,老师又讲过的,用递归。

代码实现:
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;
        }
}
回复 使用道具 举报
744919632 发表于 2015-12-13 00:32
阶乘,老师又讲过的,用递归。

代码实现:

不错哦,思路非常清晰
回复 使用道具 举报
sky123 中级黑马 2015-12-13 19:18:38
12#
嗯,路过来看看,共同加油吧
回复 使用道具 举报
哎 ,看了半天没懂,我们还没学到递归
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马