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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Teemo_Mann 中级黑马   /  2014-4-15 21:12  /  1368 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Teemo_Mann 于 2014-4-16 19:01 编辑

求1000!的结果中包含多少个0?注:1000! = 1×2×3×4×5×...×999×1000,大家还有更好的思路吗?探讨一下,我用的是计算出5的个数来算的.


public class Test9 {
        public static void main(String[] args){
                int tmp = 0;
                int flag = 0;
                int num = 0;
               
                //0的个数是2 * 5想乘的结果,只要判断有多少个5即可
                for(int i = 5;i <= 1000;i ++){
                        flag = i % 5;
                        tmp = i;
                        //若这个数能被5整除,则继续除,算出由多少个5组成.
                        while(flag == 0){
                                num += 1;
                                tmp /= 5;
                                flag = tmp % 5;
                        }
                }
                System.out.println("1000!阶层0的个数:" + num);
        }
}

12 个回复

倒序浏览
咱别算1000了,Long也放不下,你用你的方法算算15的阶乘有几个0,再自己定义一个方法算下15的阶乘,我算的结果是,15的阶乘4个0,20的阶乘6个0,而你的算法分别是3个0和4个0,求解!
回复 使用道具 举报
曹冬明 发表于 2014-4-15 22:04
咱别算1000了,Long也放不下,你用你的方法算算15的阶乘有几个0,再自己定义一个方法算下15的阶乘,我算的 ...

Long肯定是不行的,你只能在乘的过程中进行处理,就是乘之后让数变小再乘
回复 使用道具 举报
曹冬明 发表于 2014-4-15 22:04
咱别算1000了,Long也放不下,你用你的方法算算15的阶乘有几个0,再自己定义一个方法算下15的阶乘,我算的 ...

刚才算了下15!是1307674368000确实是4个0,看来我的算法存在问题
回复 使用道具 举报
曹冬明 发表于 2014-4-15 22:04
咱别算1000了,Long也放不下,你用你的方法算算15的阶乘有几个0,再自己定义一个方法算下15的阶乘,我算的 ...

我知道为什么了,我的方法是只能算末尾有几个零,因为两个乘数在进位时可能让数中间产生0,比如114912 * 11 = 1264032,这样的话我的算法检测不出来,因为对5取余还不是等于0,你可以贴出你的算法吗,或者说下你的逻辑
回复 使用道具 举报
Teemo_Mann 发表于 2014-4-16 18:02
我知道为什么了,我的方法是只能算末尾有几个零,因为两个乘数在进位时可能让数中间产生0,比如114912 * 11  ...

你让我算中间几个0我不会算,我只会算末尾的,这是我的帖子,你看看吧,逻辑不懂的话问我
http://bbs.itheima.com/thread-114372-1-1.html
回复 使用道具 举报
doyxy 中级黑马 2014-4-16 18:12:16
7#
结果中包含多少个0没法算吧,末尾包含多少个0?
回复 使用道具 举报
public static void main(String[] args) {
                int sum = getZero(1000);
                System.out.println(sum);
               
        }
        
        public static int getZero(int num) {
                int count = 0;                                                        //定义计数器计数
                BigInteger bi1 = new BigInteger("1");        //创建BigInteger对象初始值为1
               
                for(int i = 1; i <= num; i++) {                                //遍历数组
                        BigInteger bi2 = new BigInteger("" +i);                //用遍历到的数字创建BigInteger对象
                        bi1 = bi1.multiply(bi2);                                //求阶乘(两个对象相乘)
                }
               
                String str = bi1.toString();        //将BigInteger对象装成字符串
               
                for(int i = 0; i < str.length(); i++) {                //遍历字符串
                        if(str.charAt(i) == '0') {                //如果字符串中的字符和字符相等
                                count++;                                        //计数器自增        
                        }
                }
                return count;                                //将计数器返回
        }



求1000!的结果中有多少个零   建一个class 把上面的代码拷贝过去

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
/**
         * 1000的阶乘,后面一共多少个零
         */
        public static void main(String[] args) {
                int zeroNum = getZero(1000);
                System.out.println(zeroNum);
        }
        public static int getZero(int num) {
                if(num >= 0 && num <=5) {
                        return 0;
                }else{
                        return num /5 +getZero(num / 5);
                                //        200                +                getZero(200)
                                                //        40                +                getZero(40)
                                                                //        8                +                getZero(8)
                                                                                                // 1
                }
        }
回复 使用道具 举报
xtxiaolu 发表于 2014-4-16 18:26
public static void main(String[] args) {
                int sum = getZero(1000);
                Sy ...

涨姿势了,以前没听过这个东西
回复 使用道具 举报
Teemo_Mann 发表于 2014-4-16 19:01
涨姿势了,以前没听过这个东西

用的是递归,也就是自己调用自己如果没写好,就会进入死循环
回复 使用道具 举报
本帖最后由 ⒈心只霸占沵 于 2014-4-16 19:30 编辑
  1. package Test;

  2. public class CountZero {

  3.   public static void main(String[] args) {
  4.           String str="";
  5.           int count=0;
  6.           for(int i=1;i<=1010;i++){
  7.                      str=String.valueOf(i);
  8.                          count+=countZero(count,str);
  9.           }
  10.           System.out.println("一共有\"0\":"+count+"个");
  11.   }
  12.   //不知道大家还记不记得查询一个字符串中包含多少个对应的字符  比如"abcadabakdakafa" 中包含多少个"a",同理
  13.   public static int countZero(int count,String str){
  14.                int index=0;
  15.                String key="0";
  16.                int countTemp=0;
  17.                System.out.print(str+"-----------中0的个数为:");
  18.                   if(str.contains(key)){
  19.                          while((index=str.indexOf(key))!=-1){
  20.                           str=str.substring(index+key.length(),str.length());
  21.                           countTemp++;
  22.                          }
  23.                   }
  24.                   System.out.print(countTemp+"\n");
  25.                   return countTemp;
  26.   }
  27. }
复制代码
回复 使用道具 举报
  1. package Test;

  2. public class CountZero {

  3.   public static void main(String[] args) {
  4.           String str="";
  5.           int count=0;
  6.           for(int i=1;i<=1010;i++){
  7.                      str=String.valueOf(i);
  8.                          count+=countZero(count,str);
  9.           }
  10.           System.out.println("一共有\"0\":"+count+"个");
  11.   }
  12.   //不知道大家还记不记得查询一个字符串中包含多少个对应的字符  比如"abcadabakdakafa" 中包含多少个"a",同理
  13.   public static int countZero(int count,String str){
  14.                int index=0;
  15.                int countTemp=0;
  16.                System.out.print(str+"-----------中0的个数为:");
  17.                   if(str.contains("0")){
  18.                          while((index=str.indexOf("0"))!=-1){
  19.                           str=str.substring(index+1,str.length());
  20.                           countTemp++;
  21.                          }
  22.                   }
  23.                   System.out.print(countTemp+"\n");
  24.                   return countTemp;
  25.   }
  26. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马