黑马程序员技术交流社区

标题: 面试中的小题,给大家分享一下 [打印本页]

作者: 习惯就好    时间: 2015-3-9 20:39
标题: 面试中的小题,给大家分享一下
  1. package com.heima;

  2. import java.math.BigInteger;

  3. /*
  4. * 问题:求1000!的结果中包含多少个0
  5. 1000! = 1×2×3×4×5×...×999×1000
  6. 遇10为零*/

  7. public class Test2 {
  8.         public static void main(String [] asd)
  9.         {
  10.             BigInteger bt=new BigInteger("1000");
  11.           
  12.             for(int x=1;x<1000;x++)
  13.             {
  14.                    
  15.                     BigInteger aa=new BigInteger(String.valueOf(x));
  16.                     bt=bt.multiply(aa);
  17.             }
  18.             //BigInteger aa=bt.multiply(bt);
  19.             String str=bt.toString();
  20.             System.out.println(str);
  21.             int count=0;
  22.             int dex=0;
  23.             String strr="0";
  24.                     while((dex=str.indexOf(strr,dex))!=-1)
  25.                     {
  26.                             dex++;
  27.                             count++;
  28.                     }               
  29.             System.out.println("零的个数有:"+count);
  30.         }
  31. }
复制代码



作者: wdhm5423    时间: 2015-3-9 22:00
面试会考这个类?这个类老师讲过吗
作者: 佟金    时间: 2015-3-9 22:39
public class Test {
        public static void main(String[] args)
        {
                int count = 0;
                long mul = 1;
                for(int i = 1;i<=100;i++)
                {
                        mul=mul*i;
                }
                System.out.println("值为"+mul);
                for(int j=10;mul%j==0;mul=mul/j)
                        count++;
                System.out.println("零的个数为:"+count);
        }

}
这样做电脑会不会死
作者: 佟金    时间: 2015-3-9 22:57
public class Test {
        public static void main(String[] args)
        {
                int count = 0;
                int mul = 1;
                for(int i = 1,j=10;i<=1000;i++)
                {
                        mul=mul*i;
                        while(mul%j==0)
                        {
                                mul=mul/10;
                                count++;
                        }
                       
                }
                System.out.println("零的个数为:"+count);
        }
}
改一下,数字一直在蹦,一直不停
作者: 习惯就好    时间: 2015-3-10 09:54
你这种算法不行,首先mul的值会溢出,所以运行时光标总是闪,第二你每运行到10的倍数时mul就会变回这样你只能算出末尾带零的个数,并不能算出阶乘结果中的所有零的个数。你自己可以将1000改成20,然后将mul的类型改成long类型   先将while语句注释掉,看看阶乘的结果是多少个零,然后加上while语句看看是结尾零的个数不
作者: 1021361407    时间: 2015-3-10 19:16
佟金 发表于 2015-3-9 22:39
public class Test {
        public static void main(String[] args)
        {

内存溢出啊
作者: 1021361407    时间: 2015-3-10 19:18
佟金 发表于 2015-3-9 22:57
public class Test {
        public static void main(String[] args)
        {

i=100时count++显然是错误的
作者: pop1234o    时间: 2015-3-10 20:44
这个思路就是,因为只有2*5 才有零的出现,所以可以统计一下 1。。。1000有多少个2,和5,最后取个数少的那个就是0的个数
作者: mark.tian    时间: 2015-3-10 21:04
看来考试的内容还是有点难的哇。。。
作者: 自信流云    时间: 2015-3-10 21:22
我去,这个是面试题?不明觉厉啊!
作者: 栗子木头    时间: 2015-3-10 21:46
这内容有点难呀。。。




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