http://expert.csdn.net/Expert/topic/3105/3105509.xml?temp=.1253168
与笔者的另一算法(http://www.csdn.net/Develop/read_article.asp?id=28306)相比,采用下面的方法,阶乘的计算速度快了好几倍!
Sub calcfactorial(ByVal n As Integer) Dim XYS() As Integer, x() As Integer, y() As Integer, result() As String, i As Long, j As Long, k As Long, TEMP As Long, stimer As Double If n < 0 Then Exit Sub ReDim x(1) ReDim XYS(1) x(1) = 1 XYS(1) = 1 k = 1 stimer = Timer Do While k <= n
TEMP = Len(CStr(k)) ReDim y(1 To TEMP) For i = 1 To TEMP y(i) = Val(Mid(k, i, 1)) Next ReDim XYS(LBound(x) To UBound(x) + UBound(y)) For i = LBound(x) To UBound(x) For j = 1 To UBound(y) XYS(i + j) = XYS(i + j) + x(i) * y(j) Next Next For i = UBound(x) + UBound(y) To LBound(x) + 1 Step -1 TEMP = XYS(i) \ 10 XYS(i) = XYS(i) Mod 10 XYS(i - 1) = XYS(i - 1) + TEMP Next
x = XYS k = k + 1 Loop
ReDim result(1 To UBound(x)) i = 1
Do While x(i) = 0 ''''消除结果前边的多个“0” result(i) = "" i = i + 1 Loop Do While Not i > UBound(x) result(i) = x(i) i = i + 1 Loop factorial = Join(result, "") Debug.Print k - 1 & "! : 用时 "; Timer - stimer & " 秒, 结果 " & Len(factorial) & " 位" ''''Debug.Print factorial Erase x() Erase y() Erase XYS() Erase result() End Sub
Private Sub Command1_Click() For i = 1 To 10 calcfactorial i * 1000 Next
End Sub
上述过程中,每步的计算结果得到的数组,开始的若干元素总有无效的“0”,导致时间和内存资源的浪费,而且数值越大,无效运算就越多。苦苦思索不得更有效的解决方法,请各位算法高手指教。
输出结果:
100! : 用时 .015625 秒, 结果 158 位 200! : 用时 .047124999997322秒, 结果 375 位 300! : 用时 .172625000006519 秒, 结果 615 位 400! : 用时 .266250000000582 秒, 结果 869 位 500! : 用时 .422749999997905 秒, 结果 1135 位 600! : 用时 .657000000006519 秒, 结果 1409 位 700! : 用时 .891250000000582 秒, 结果 1690 位 800! : 用时 1.1571249999979 秒, 结果 1977 位 900! : 用时 1.48450000000594 秒, 结果 2270 位
1000! : 用时 1.84412500000326 秒, 结果 2568 位 2000! : 用时 9.79700000000594 秒, 结果 5736 位 3000! : 用时 23.703125 秒, 结果 9131 位 4000! : 用时 43.7663750000065 秒, 结果 12674 位 5000! : 用时 72.0003750000033 秒, 结果 16326 位 6000! : 用时 104.15625 秒, 结果 20066 位 7000! : 用时 142.422749999998 秒, 结果 23878 位 8000! : 用时 192.125375000003 秒, 结果 27753 位 9000! : 用时 241.281875000001 秒, 结果 31682 位 10000! : 用时 302.859500000006 秒, 结果 35660 位
5000!=422857792660554352220106420023358440539078667462664674884978240218135805270810820069089904787170638753708474665730068544587848606668381273633721089377278763127939036305846216064390447898698223987192970889621161265296832177550039924219683703146907264472878789790404754884162215226671928410969236910449565971736352948400223840381120644820230857671104502306174894755428309761781724040805324809927809328784055486199364548291211876258248802189173977900050213212598043639244626460770511358846595108675470585833924655225589035474435988347383178988034633008458631510209091509935653820010933047965742556741930917055172805200236075085991197635228755907902043369743123506916831211924495971556267407521462198986233088625998302859864857578749445963115286970886710046268423648178989905454690861391613218344174148807186234448114831209490361196546872767755617886828720269104814092456410341835975604276458161513178575901661071782544156980883359372729995603371371200471049437656291142488605335299499642300699972204918120100819059439140675053 265004775533850899097945101551091486907004407119572336026243368132330218709287699196806656569752790422258267841561083376425781032629202687211070274681394351128601502326190649959171897364176378436491219709109840944514895358959103804176941956657834822071749105512752639148381172052604826965162642710094919393332661030104360530459117014557209584714353721948246686793467375904872268133410207860903657108806376616249749507413107077401682180585945526445171409277469230062697511346044174567946735828782261629584248675157379172942724178783105429858245117575511884506574424827574660800238588378492396247368761507015767725898321128632295537044902516387925127590841791744640466913531047347984464996154595542013996317357476301740036796192919942190762895445656261767041799538161133387312823511534152581309087915883638351664797225912944270653557142511737323807232632958121797916679692329687096923901003255574789055099807487061047230646195984955239657612208673866514171699307557691897902675157342075864796345338446835085965490727326321910 504064289713096224505162064669468098869917122127404504020684923266241760132910227866687270305284709452526825496617772499645206699836925910690894082637401043498371591126455822280606361394115344316771769934353664284928294436414769615881993661388255577487709937004594753907845149034434521174560594039916268444697661821387470705325559577933196460996662145377564935474169708562389214773222865507182490430016186142192760452307670621142961767274704123616107220009743758647492753665149532164780849075146330071016691313420662882562618283865836983632108760710427516073348347788414796732427080410860761841281888307115098982135338406610652147087046874760995427473673509451553599769040367353385551052571682650317682405743993414862392331981432579182193321898940450865013610998098383993110996355981328001049731588596312131853801205046787642910669365600437305633431984879048998524701293300789344532868156679762880495532846386020133480265279836946393384995675049993707814746561543438930431384237878981847802886009971088695632988347711863122 382785963653115132377931373647397429369411499028751972227999545182615488298951151926682112451355318472209990435355949887299922035062039816011086376236539782172380237846650673624510635034423187315338308212043804710999419227821039747552717416043890169723961305549371844836119803565896062025009093664399360172007383613354405094329072476518909502507724675841989412224659392163116352038147362479528539732089309533421910635702805576629720156556510767780805933453631121829561792887673002802450932122778852968418208261778476955644980385691275787372678040959158711733971103165232678060798127609246173504120182666874262805385275843979167609007743380748420751185119102921960339376280986753665085212869255321536787932521882574101866137054328973735862725370178558806639851350386944039604928258820180419178073649693885802597758398892014389747165465973510852605706234402069637065660129535734043582961473427275805630839510667375349259659518575646939723218275780003250593895303820539697558870511543073920827422440516299708739599768461206246 629098112368012579891284802505094028916959765079395437191311379314427405135599630375642214527294341797246187597964074239147838993541565834716156858499036773056611353833367087548900413091981676330749041510337597307246885839246941715548295730750618505881581959528992660225626903439573313450666972952115230668696227920947779974336574472673471408928071411283888082693377378077293104110767513639476200610858040596019639058015761002337463869352228385801434957178125581445862930042479404065736859862007914604590255413929950088044710384758990326548097338166940500085452723713571394902463820308668541802838317527668064278489561005755859991718966786449154063570014497194249878920859731254275567514575206399118150736397483102490793841725653421894276769116598153430084637087769510295415136551734675054015239706042571746001089968440498845985477977905031632568489156557231006499726498721480800181770357701502983008879487243887718884416833034708723239505377642232944095773219137582371673924704216723002256883135779230394688900662466182532 658490724406767024939579697217467485562998183149665611743997680482094166257463879660305171274925119226367615337524381656217330771650129520988754856467131862602387619964334867961514408328902061082833180891221325853682856469916007952105166960451695430614212305743006877217407155473217957577017595967640563812729153867513698712395570542350999228605975469962186195531354132139126436676900465429996811680550737866770665988027062972502001882845886145344368771455361304414465613369092862748276981946836480550952968681758714859972973082332924094777085275279923304892719633314751563311192746150389219290616780607901383451137066300684376267199885515143681266137319912103235469786756421210624899005553564022924345831264231038363416781719908354140411717740185950606674198348143345444247191436828225654380047860390575922417071802670646875454211626958746795398540784464654140381751149965273621123540880166990280149033225139460832668170930713868826549977374286127789417784752681328371818759103642140881783220739808059714203285309721443041 845459183002833408705783138284973283761286182927136745161897366207237396132790944984014154408304074405393067540767126182547597130843470311389815695365971788564022750674237400323621850094765267521941901241387478279883426470873616812485384444012772521050072279315853096279121131160167772077952572613800240684421885453537121341902236379684012385255288607189967725694227433323948595075570839061877450159652184414998155476107548008054192318436948191732631430603548399790783307267636729090980772827355854348032260067472537097785464567761181807367424367391769863758072145859791485033700592994963793369100283444558089838054017635403737133019311293080958287612107380374800660269767842888358265737486556785868822015143046249655995760379768685318192365806469199584071845493606922169776137542662239658644989770921478134709127917460871630220821981434654245065731262683089579031012893360788644107230184805400373136014216229159146992019884148290014414312800903102107833305090238435726779416177246873411503598700003151092815700331081727415 6246804329772050704504566838986263017029893011453644774168567325123303764778817490360525726055206843706161165397551325413693038677832672082273236642492064323630892687688266509396918616832717397574795529932424061869924203637819294853680980352563310924482152692762191162591458863936770346534803678871261333671169682264509 [1] [2] 下一页 没有相关教程
|