level 9
2000! 用了53秒,9527!等了好久都没算出来,估计得一个小时。之前吧里有写大数计算器的,借用他的乘法看看能不能算出来。
2014年08月27日 01点08分
8
没找到那个大数计算器,这个算法还是不行啊,时间太长,一个学姐用数组解决了
2014年08月27日 02点08分
回复 云城饮雪 :数组,看到这个我倒有个想法,分成多段阶乘,再把各段结果相乘,也许会缩短时间。我先试试。
2014年08月27日 02点08分
回复 youbest2013 :貌似没有快多少,看来得改变算法了
2014年08月27日 02点08分
这个速度太慢了,2000!只需要0.8毫秒
2022年05月25日 06点05分
level 7
前面几位结果是这个:
240120230349273027
114571351605
891279
18708025855
057947170
13119914413
26815479086
18327491726
96887858122
13777932978
32986025845233228391055
18911097121
66814439396967848872230305
15365565942
8804898920885612345856273639355
15761281963
67087886596707148855283974729958014978479278873682266792444290609424381079
15877721057
30868309963732008341920868391969382
13870398112
58425123783040650
13873363139
3528017575787270022696354776609284446307805176088555880626867551463943
13285637416
453648534254940594646225083949282089468700
15254402494
2652582688360565047490974714904629
15603947489
78032968204540291203
13735250731
1996581603307031967921219012514299060527309643387725861
15109316992
54398200385615494309959449469237856176663219942144658
18304636301
0585055273797925
13717072189
157541204821481923971039581985585316630945165428725207061012863278120604371217912
18637887127
99092365143527436572163917403205366
13742727088
0783690325526054290672606404280554457404425359908
13983807821
81161666875194242112690
18187798668
2783558624226814852663127640590194811657199887574
18335818869
199460459143202025000762110522169297680122667314108
18547549452
298871
15736883998
057500090636569033046093705271903920660848
13773815026
445470502370936300058956
13309268659
38023
18846374335
09656
18186844861
747957279342958572869448249426991463
13024482010
86643202282048664671405533923217788262087308701962444070488729474
15933629767
7484
13064857166
927638630
13021097151
9261408954142046503219048766117323355823249590785330168
18740561007
3317403736505674
13369924405
9619646342129709687643
15805724536
58693190733477486275140644794
18032718443
47723795864272871754538582999441001192
13130252728
9320010651120831452981985472501620305
18366812131
677821420090
15208139551
6212929742912867783588273244656672
15144307518
834632455336267125648708991764528176954251908875238691489141163414422036028075671082885596811192953496524746
18835991225
210
13263454340
63657397848435827
18364121683
17583112826652312541452
18449118151
37395
13982846967
369503154449508874
18023224463
112346382
13287819600
05470822707617771729319689332168554225
18140601533
09199346096805833
18245512607
030676704904452568589789497292495022686471483090565719211257
13761313921
2759778684202439710506875762940582809
18035311887
27364657901106345808520300
13019461674
69193299486291464502999934076004059345935773538432701405930624023
15731630597
6799
13591250284
88855560481646326366640
13838736738
283227964044502754119558
15877740593
70961086863
18840307837
019173374500577744626377880329808850692400386036721125548974507
18357482825
6562762965630935240524529602819025295832903514239299579653355534375841127564281
13098227039
727932392502665095470196594850709195021452314085339140
13293723657
72905722362
15648030791
429223516840301230555953886090042516931734329
18318945954
56495169700566096432856765764878
15775907596
56906173376124880703458535522726925844596607
13021143874
819691753494760308948799658462448485070146710598
13341601063
6812041488236549833907801270514532562521163472354422
13109523580
938976012455986814
15995968966
4659701924217952678255636786411433619164908786850572572226905092604770896328711789888374389473164478098
18836330279
10894
13081651990
124140657101227616763453968112646872
13863513839
76899446271142204
13086106683
3579542741463759524683806067246463907926564292688816
18416708098
3640458866023026500529457176147529607421687046765352946212423845274991172093675985280550683595
18728585596
47043984588834444064035444838981040007568041042687534054
18823940025
5712992980843874478075036347082198604492788837893857426266127394955702
18822833129
22831928920554907194168316
13573585026
8
18997482031
1964466932126297175063
15862449230
00296805060140586341225862802608828458640161730
15705901873
279701735033579198001026324754690052637961
13408882856
78641488082196345
18113116598
83949788078658516635642438217775299161420
15548838216
848475956972750405400214045319620546288303530121719
13457277546
81549529745830219262
18085274471
7084524424041290
13242670705
6
15857918329
461421425468728699594031543972814
13562664433
72942819
15135215520
046757904102672876146423305584
13850658091
97702336492641443650936143126528590757783787316758141127279984950583488702656875685988936973210062427746486173
13031923445
61400243
13925122257
7888822178
18547961233
53126062768947844906543321543670320863
13875051883
939000
13023969863
6679032679765955728525816594688342
18169569348
5827
13738280440
87464497497588456059975212831
13806359152
021757742722922928485227230870540795810
114733675027
58592589210975
18269453711
774950107539769098977788810676317056734
15040867424
960926
18207271761
2108708003121072874112577
18787687974
39578897329726044191262534076937312334859565575445364893510912216057048175
18246976585
33820643540996849233
13843476479
594259592058857931945972472553935562612702
13366445392
279079367271193820568625261972008067869327
13335528420
2542938830883
18828948357
59210379656307482293285328747896701922422354483963827516881924408775992899063111211432220345746
13684262268
50595098249329373743857296173
13810883442
935938720500357335322041
18965687085
885602508075201475449
15161929728
541154056790433
13583379526
2447621986887537212
15898443321
335486429673
15597923874
925025622810314
13742229916
12546712901439938533559630417361789990319600934173
18826187082
05710114191091...
一共33773位
2014年08月28日 01点08分
10
level 7
我的代码如下:
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
Dim d(10000) As Long, n As Long, tick As Long
Sub Mult(t As Long)
Dim i As Long
For i = 1 To n
d(i) = d(i) * t
Next
For i = 1 To n
If d(i) >= 10000 Then
d(i + 1) = d(i + 1) + d(i) \ 10000
d(i) = d(i) Mod 10000
End If
Next
If d(n + 1) <> 0 Then
n = n + 1
End If
End Sub
Sub Save()
Dim i As Long
Print #1, CStr(d(n));
For i = n - 1 To 1 Step -1
Print #1, Format(d(i), "0000");
Next
Print #1,
End Sub
Sub Prepare()
Dim i As Long
For i = 1 To 2000
d(i) = 0
Next
d(1) = 1
n = 1
End Sub
Private Sub Command1_Click()
Dim t As Long, i As Long
Prepare
Open "d:\t.txt" For Output As #1
tick = GetTickCount
t = Text1.Text
For i = 1 To t
Mult i
Next
Save
Close
tick = GetTickCount - tick
MsgBox CStr(tick)
End Sub
这代码在Win7+VB6下通过,计算2000!需要16毫秒,计算9527需要531毫秒。
2014年08月28日 01点08分
11
回复 云城饮雪 :小事儿……
2014年08月28日 01点08分
level 11
我特么醉了,学长问我,你为什么要用VB呢,我用Haskell,只写了两行代码……
2014年08月28日 02点08分
12
因为这些稀奇古怪的语言应用范围都极小,不像VB这样有大量的材料、用户和广泛的通用性……我本人就是非常不鸟那些小众语言的……
2014年08月28日 02点08分
回复 blushadow :嗯,这个看个人喜欢,我比较推崇根据情况选择最好方法
2014年08月28日 02点08分
我主张,算法这种东西,一定要用通用性强的语言加以实现,这样当你需要写其它领域的问题时,语法知识不用重新学就能就地解决,不要羡慕那些看似方便的语言,你的代价是如果你需要解决另外类别的问题,是需要重新学习语法的,最终导致知识的碎片化……
2014年08月28日 02点08分
回复 blushadow :嗯,也有道理,但是精力允许完全可以掌握两三种其他的
2014年08月28日 03点08分