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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

:求1000!的结果中包含多少个0?注:1000! = 1×2×3×4×5×...×999×1000
public static void main(String [] args)
        {
                int count=1;
                for (int x=1;x<=10;x++)
                {
                        count=count*x;
                       
                       
                }
                 String str=String.valueOf( count);
                 System.out.println("str="+str);
                 
                 
                int i=charCount(str);
                System.out.println(i);
               
        }
        public static int charCount(String str)
        {
                char [] chs=str.toCharArray();
               
                int count=0;
                for (int x=0;x<chs.length;x++)
                {
                       
                        if(chs[x]=='0')
                                 count++;
                }
                return count;
        }
请同学们指教了:)

15 个回复

倒序浏览
感觉很厉害的样子:lol
回复 使用道具 举报
思路有问题。

定义的计数器count是int型,它有自己的上限,即便是定义成long型,仍然不行,阶乘的增长速度极快,很快就把long用满。

这个题目不能直接求出阶乘的值再运算,要取巧——卖个萌,楼主自己想,不过可以提个醒,2*5=10

还有一点,charCount方法是不是有问题,应该倒着数吧。for循环问题
回复 使用道具 举报
1000的阶乘?我印象中25!以上就各种乱码了:L
回复 使用道具 举报
wisely 发表于 2014-7-26 21:39
思路有问题。

定义的计数器count是int型,它有自己的上限,即便是定义成long型,仍然不行,阶乘的增长速度 ...

2*5=10只适用于求乘积末尾的0,lz问的是求乘积中所有的0。
回复 使用道具 举报
fantacyleo 发表于 2014-7-26 21:44
2*5=10只适用于求乘积末尾的0,lz问的是求乘积中所有的0。

阶乘里的0会出现在中间么…………
回复 使用道具 举报
本帖最后由 黎志勇 于 2014-7-26 22:11 编辑

用大整数呗。
  1. package test;

  2. import java.math.BigInteger;

  3. public class Test8 {
  4.     public static void main(String[] args)  {
  5.         getZero(1000);
  6.     }

  7.     public static void getZero(int num)  {
  8.         //因为1000!的阶乘非常大,需要使用大整数BigInteger类
  9.         //N! 1*2*3*……*(N-1)*N,所以把结果的初始化为1
  10.         BigInteger bigInteger = BigInteger.valueOf(1);
  11.         for (int i = 1; i <= num; i++) {
  12.             //multiply()是大整数的乘法操作
  13.             bigInteger = bigInteger.multiply(BigInteger.valueOf(i));//阶乘
  14.         }
  15.         char[] chars = bigInteger.toString().toCharArray();//把计算结果转成字符串,再转成字符数组
  16.         int count = 0;//初始化计数
  17.         for (int i = 0; i < chars.length; i++) {
  18.             if(chars[i]=='0') {//比较每个字符,若为字符'0',计数加1
  19.                 count++;
  20.             }
  21.         }
  22.         System.out.println(num+"! 含有 "+count+" 个0");//打印结果
  23.     }
  24. }

复制代码



回复 使用道具 举报
wisely 发表于 2014-7-26 21:47
阶乘里的0会出现在中间么…………

还真会。
  1. 1!=1
  2. 2!=2
  3. 3!=6
  4. 4!=24
  5. 5!=120
  6. 6!=720
  7. 7!=5040
  8. 8!=40320
  9. 9!=362880
  10. 10!=3628800
  11. 11!=39916800
  12. 12!=479001600
  13. 13!=6227020800
  14. 14!=87178291200
  15. 15!=1307674368000
  16. 16!=20922789888000
  17. 17!=355687428096000
  18. 18!=6402373705728000
  19. 19!=121645100408832000
  20. 20!=2432902008176640000
  21. 21!=51090942171709440000
  22. 22!=1124000727777607680000
  23. 23!=25852016738884976640000
  24. 24!=620448401733239439360000
  25. 25!=15511210043330985984000000
  26. 26!=403291461126605635584000000
  27. 27!=10888869450418352160768000000
  28. 28!=304888344611713860501504000000
  29. 29!=8841761993739701954543616000000
  30. 30!=265252859812191058636308480000000
  31. 31!=8222838654177922817725562880000000
  32. 32!=263130836933693530167218012160000000
  33. 33!=8683317618811886495518194401280000000
  34. 34!=295232799039604140847618609643520000000
  35. 35!=10333147966386144929666651337523200000000
  36. 36!=371993326789901217467999448150835200000000
  37. 37!=13763753091226345046315979581580902400000000
  38. 38!=523022617466601111760007224100074291200000000
  39. 39!=20397882081197443358640281739902897356800000000
  40. 40!=815915283247897734345611269596115894272000000000
  41. 41!=33452526613163807108170062053440751665152000000000
  42. 42!=1405006117752879898543142606244511569936384000000000
  43. 43!=60415263063373835637355132068513997507264512000000000
  44. 44!=2658271574788448768043625811014615890319638528000000000
  45. 45!=119622220865480194561963161495657715064383733760000000000
  46. 46!=5502622159812088949850305428800254892961651752960000000000
  47. 47!=258623241511168180642964355153611979969197632389120000000000
  48. 48!=12413915592536072670862289047373375038521486354677760000000000
  49. 49!=608281864034267560872252163321295376887552831379210240000000000
  50. 50!=30414093201713378043612608166064768844377641568960512000000000000
  51. 51!=1551118753287382280224243016469303211063259720016986112000000000000
  52. 52!=80658175170943878571660636856403766975289505440883277824000000000000
  53. 53!=4274883284060025564298013753389399649690343788366813724672000000000000
  54. 54!=230843697339241380472092742683027581083278564571807941132288000000000000
  55. 55!=12696403353658275925965100847566516959580321051449436762275840000000000000
  56. 56!=710998587804863451854045647463724949736497978881168458687447040000000000000
  57. 57!=40526919504877216755680601905432322134980384796226602145184481280000000000000
  58. 58!=2350561331282878571829474910515074683828862318181142924420699914240000000000000
  59. 59!=138683118545689835737939019720389406345902876772687432540821294940160000000000000
  60. 60!=8320987112741390144276341183223364380754172606361245952449277696409600000000000000
  61. 61!=507580213877224798800856812176625227226004528988036003099405939480985600000000000000
  62. 62!=31469973260387937525653122354950764088012280797258232192163168247821107200000000000000
  63. 63!=1982608315404440064116146708361898137544773690227268628106279599612729753600000000000000
  64. 64!=126886932185884164103433389335161480802865516174545192198801894375214704230400000000000000
  65. 65!=8247650592082470666723170306785496252186258551345437492922123134388955774976000000000000000
  66. 66!=544344939077443064003729240247842752644293064388798874532860126869671081148416000000000000000
  67. 67!=36471110918188685288249859096605464427167635314049524593701628500267962436943872000000000000000
  68. 68!=2480035542436830599600990418569171581047399201355367672371710738018221445712183296000000000000000
  69. 69!=171122452428141311372468338881272839092270544893520369393648040923257279754140647424000000000000000
  70. 70!=11978571669969891796072783721689098736458938142546425857555362864628009582789845319680000000000000000
复制代码


回复 使用道具 举报
wisely 发表于 2014-7-26 21:47
阶乘里的0会出现在中间么…………

为什么不会。。。
factorial(1000)=
40238726007709377354370243392300398571937486421071463254379991042993851239862902
05920442084869694048004799886101971960586316668729948085589013238296699445909974
24504087073759918823627727188732519779505950995276120874975462497043601418278094
64649629105639388743788648733711918104582578364784997701247663288983595573543251
31853239584630755574091142624174743493475534286465766116677973966688202912073791
43853719588249808126867838374559731746136085379534524221586593201928090878297308
43139284440328123155861103697680135730421616874760967587134831202547858932076716
91324484262361314125087802080002616831510273418279777047846358681701643650241536
91398281264810213092761244896359928705114964975419909342221566832572080821333186
11681155361583654698404670897560290095053761647584772842188967964624494516076535
34081989013854424879849599533191017233555566021394503997362807501378376153071277
61926849034352625200015888535147331611702103968175921510907788019393178114194545
25722386554146106289218796022383897147608850627686296714667469756291123408243920
81601537808898939645182632436716167621791689097799119037540312746222899880051954
44414282012187361745992642956581746628302955570299024324153181617210465832036786
90611726015878352075151628422554026517048330422614397428693306169089796848259012
54583271682264580665267699586526822728070757813918581788896522081643483448259932
66043367660176999612831860788386150279465955131156552036093988180612138558600301
43569452722420634463179746059468257310379008402443243846565724501440282188525247
09351906209290231364932734975655139587205596542287497740114133469627154228458623
77387538230483865688976461927383814900140767310446640259899490222221765904339901
88601856652648506179970235619389701786004081188972991831102117122984590164192106
88843871218556461249607987229085192968193723886426148396573822911231250241866493
53143970137428531926649875337218940694281434118520158014123344828015051399694290
15348307764456909907315243327828826986460278986432113908350621709500259738986355
42771967428222487575867657523442202075736305694988250879689281627538488633969099
59826280956121450994871701244516461260379029309120889086942028510640182154399457
15680594187274899809425474217358240106367740459574178516082923013535808184009699
63725242305608559037006242712434169090041536901059339838357779394109700277534720
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000L
回复 使用道具 举报

这才是真的吊了,,不得不服,,
回复 使用道具 举报

真会啊……

第一次发现,原来阶乘的值如此之长…………
回复 使用道具 举报
wisely 发表于 2014-7-26 21:39
思路有问题。

定义的计数器count是int型,它有自己的上限,即便是定义成long型,仍然不行,阶乘的增长速度 ...

:#确实,我就想看看用这个思路有没有接,我试过long型的,不可以,你说的那个思路我看到了,就是把,不过谢谢啦,我在思考思考吧
回复 使用道具 举报
柠萌不 发表于 2014-7-26 21:43
1000的阶乘?我印象中25!以上就各种乱码了

用我这个是求不出来的呀,数太大了,打印出来就是0,:(
回复 使用道具 举报

恩恩,好的,谢谢,BigInteger,学习学习
回复 使用道具 举报
wisely 发表于 2014-7-26 21:47
阶乘里的0会出现在中间么…………

肯定会有的啊 - -
回复 使用道具 举报

太厉害了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马