http://expert.9cbs.net/expert/topic/3105/3105509.xml?temp=.1253168
Compared with another algorithm of the author (http://www.9cbs.net/develop/read_article.asp?id=28306), the following method is used, and the calculation speed of the class is several times!
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 Doubleif N <0 THEN EXIT SUBREDIM X (1) Redim Xys (1) x (1) = 1xys (1) = 1k = 1stimer = Timerdo While K <= n
Temp = LEN (CSTR (K)) Redim Y (1 to Temp) for i = 1 to Tempy (i) = VAL (MID (K, I, 1)) Nextredim 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) NextNextFor I = ubound (x) ubound (y) to lbound (x) 1 step -1temp = xys (i) / 10XYS (i) = xys (i) mod 10XYS (i - 1) = xys (i - 1) TempNext
X = xysk = k 1loop
Redim Result (1 to Ubound (x)) i = 1
Do While X (I) = 0 'Eliminates the result of multiple "0" Result (i) = "" "" I = i 1LoOopdo while not i> Ubound (x) Result (i) = x (i) i = i 1LOOPFACTORIAL = JOIN (Result, ") Debug.print K - 1 &"!: Time "; Timer - Stimer &" Second, Result "& Len (Factorial) &" Bit "'Debug.Print Factorialerase x () ERASE Y () Erase Xys () ERASE RESULT () End Sub
PRIVATE SUB Command1_Click () for i = 1 to 10calcfactorial i * 1000Next
End Sub
During the above process, the array of calculation results of each step, the beginning of the number of "0", resulting in the waste of time and memory resources, and the larger value, the more invalid operations. Work hard thinking more effectively, please advise the algorithm.
Output results:
100! : Time .015625 seconds, result 158 bits 200! : Time .047124999997322 seconds, 375 bits 300! : When used. 172625000000006519 seconds, 615 bits 400! : When used. 266250000000582 seconds, 869 bits 500! : When used .42274999997905 seconds, 1135 bits 600! : When used. 657000000006519 seconds, the result 1409 bit 700! : Time. 891250000000582 seconds, 1690 bits 800! : When used, 1.1571249999979 seconds, the result 1977 bit 900! : When used, 1.48450000000594 seconds, the result 2270 bit 1000! : When used, 1.84412500000000326 seconds, the result 2568 bits 2000! : Time 9.79700000000594 seconds, 5736 bits 3000! : 23.703125 seconds, the result 9131 bits 4000! : Use 43.7663750000065 seconds, the result 12674 bits 5000! : 72.0003750000000033 seconds, 16326 bits 6000! : Take 104.15625 seconds, 20066 bit 7000! : Time 142.422749999998 seconds, 30878 bits 8000! : When used 192.125375000003 seconds, the result 27753 bit 9000! : When used, 241.281875000001 seconds, the result 31682 bits 10000! : 32.859500000006 seconds, 35660
5000! =
4228577926605543522201064200233584405390786674626646748849782402181358052708108200690899047871706387537084746657300685445878486066683812736337210893772787631279390363058462160643904478986982239871929708896211612652968321775500399242196837031469072644728787897904047548841622152266719284109692369104495659717363529484002238403811206448202308576711045023061748947554283097617817240408053248099278093287840554861993645482912118762582488021891739779000502132125980436392446264607705113588465951086754705858339246552255890354744359883473831789880346330084586315102090915099356538200109330479657425567419309170551728052002360750859911976352287559079020433697431235069168312119244959715562674075214621989862330886259983028598648575787494459631152869708867100462684236481789899054546908613916132183441741488071862344481148312094903611965468727677556178868287202691048140924564103418359756042764581615131785759016610717825441569808833593727299956033713712004710494376562911424886053352994996423006999722049181 201008190594391406750532650047755338508990979451015510914869070044071195723360262433681323302187092876991968066565697527904222582678415610833764257810326292026872110702746813943511286015023261906499591718973641763784364912197091098409445148953589591038041769419566578348220717491055127526391483811720526048269651626427100949193933326610301043605304591170145572095847143537219482466867934673759048722681334102078609036571088063766162497495074131070774016821805859455264451714092774692300626975113460441745679467358287822616295842486751573791729427241787831054298582451175755118845065744248275746608002385883784923962473687615070157677258983211286322955370449025163879251275908417917446404669135310473479844649961545955420139963173574763017400367961929
1994219076289544565626176704179953816113338731282351153415258130908791588363835166479722591294427065355714251173732380723263295812179791667969232968709692390100325557478905509980748706104723064619598495523965761220867386651417169930755769189790267515734207586479634533844683508596549072732632191050406428971309622450516206466946809886991712212740450402068492326624176013291022786668727030528470945252682549661777249964520669983692591069089408263740104349837159112645582228060636139411534431677176993435366428492829443641476961588199366138825557748770993700459475390784514903443452117456059403991626844469766182138747070532555957793319646099666214537756493547416970856238921477322286550718249043001618614219276045230767062114296176727470412361610722000974375864749275366514953216478084907514633007101669131342066288256261828386583698363210876071042751607334834778841479673242708041086076184128188830711509898213533840661065214708704687476099542747367350945155359976904036735338555105257168265031768240 574399341486239233198143257918219332189894045086501361099809838399311099635598132800104973158859631213185380120504678764291066936560043730563343198487904899852470129330078934453286815667976288049553284638602013348026527983694639338499567504999370781474656154343893043138423787898184780288600997108869563298834771186312238278596365311513237793137364739742936941149902875197222799954518261548829895115192668211245135531847220999043535594988729992203506203981601108637623653978217238023784665067362451063503442318731533830821204380471099941922782103974755271741604389016972396130554937184483611980356589606202500909366439936017200738361335440509432907247651890950250772467584198941222465939216311635203814736247952853973208930953342191063570280557662972
0156556510767780805933453631121829561792887673002802450932122778852968418208261778476955644980385691275787372678040959158711733971103165232678060798127609246173504120182666874262805385275843979167609007743380748420751185119102921960339376280986753665085212869255321536787932521882574101866137054328973735862725370178558806639851350386944039604928258820180419178073649693885802597758398892014389747165465973510852605706234402069637065660129535734043582961473427275805630839510667375349259659518575646939723218275780003250593895303820539697558870511543073920827422440516299708739599768461206246629098112368012579891284802505094028916959765079395437191311379314427405135599630375642214527294341797246187597964074239147838993541565834716156858499036773056611353833367087548900413091981676330749041510337597307246885839246941715548295730750618505881581959528992660225626903439573313450666972952115230668696227920947779974336574472673471408928071411283888082693377378077293104110767513639476200610858040596 019639058015761002337463869352228385801434957178125581445862930042479404065736859862007914604590255413929950088044710384758990326548097338166940500085452723713571394902463820308668541802838317527668064278489561005755859991718966786449154063570014497194249878920859731254275567514575206399118150736397483102490793841725653421894276769116598153430084637087769510295415136551734675054015239706042571746001089968440498845985477977905031632568489156557231006499726498721480800181770357701502983008879487243887718884416833034708723239505377642232944095773219137582371673924704216723002256883135779230394688900662466182532658490724406767024939579697217467485562998183149665611743997680482094166257463879660305171274925119226367615337524381656217330771650129
5209887548564671318626023876199643348679615144083289020610828331808912213258536828564699160079521051669604516954306142123057430068772174071554732179575770175959676405638127291538675136987123955705423509992286059754699621861955313541321391264366769004654299968116805507378667706659880270629725020018828458861453443687714553613044144656133690928627482769819468364805509529686817587148599729730823329240947770852752799233048927196333147515633111927461503892192906167806079013834511370663006843762671998855151436812661373199121032354697867564212106248990055535640229243458312642310383634167817199083541404117177401859506066741983481433454442471914368282256543800478603905759224170718026706468754542116269587467953985407844646541403817511499652736211235408801669902801490332251394608326681709307138688265499773742861277894177847526813283718187591036421408817832207398080597142032853097214430418454591830028334087057831382849732837612861829271367451618973662072373961327909449840141544083040744053930675407 671261825475971308434703113898156953659717885640227506742374003236218500947652675219419012413874782798834264708736168124853844440127725210500722793158530962791211311601677720779525726138002406844218854535371213419022363796840123852552886071899677256942274333239485950755708390618774501596521844149981554761075480080541923184369481917326314306035483997907833072676367290909807728273558543480322600674725370977854645677611818073674243673917698637580721458597914850337005929949637933691002834445580898380540176354037371330193112930809582876121073803748006602697678428883582657374865567858688220151430462496559957603797686853181923658064691995840718454936069221697761375426622396586449897709214781347091279174608716302208219814346542450657312626830895790
3101289336078864410723018480540037313601421622915914699201988414829001441431280090310210783330509023843572677941617724687341150359870000315109281570033108172741562468043297720507045045668389862630170298930114536447741685673251233037647788174903605257260552068437061611653975513254136930386778326720822732366424920643236308926876882665093969186168327173975747955299324240618699242036378192948536809803525633109244821526927621911625914588639367703465348036788712613336711696822645091499705544852125975187008472002567465875240393206104590307003943825201938310248092901968460247217129832162823799462712536635997189837442509912067368838373829965389203066284307454755907423534527402921160609134632768474952204601040957560734815510167720318758008922449475292203109384166158882358499393174514991439555735764158418547983170242852396545108752542546477729459523036094641654199779794713680634491599877240917644313737117854221074057212116686869215324049008038420592119262287544089826147890812369895636708080468762 852449989744085567796945690904234053035594352464075167787395311392869861434722757214494689189609329437547674123490779275433834941232306007876761008994915612693403892114837021719338761782337035892581711286956345000136761989714540098664346192219767697593001055522519891300212302178083193433088044659295455216591185593920257978112295206535736291447840494647456500311549807205658036066738088957274646437542805581932229930508928780687453740132710027442831792535500345153669317211208822760394280978864572730697997128564957693435400403072844058174664837665849803995896424337018345415172028533781090411312446243290335396429665110948283688458012758870129315609922504451812546011327498601447043775731388100131927612467611661483352893555750310601844978899437827
4613854651708241613167681463911870000812845144341406739985430072772303758111613511094355614896323929750846383152930263582535361784837558519666949972251935515953807207838615142130284450051795239760968433198292598921623223582396390262548856855875458198371559008447860086745945709118128793228222051767509371866110013193625845223493949829511199280837860523506412769337548130609594264463425077601147334209139128541628183172262143783062962408149391997187528106367348876678481602342743230027158192404187686545826519361990687336892886715133840245486110982482004482721799496658712257174429044916781194824165631560303473833317665121218052780795958220298330611945164019413315550379662980215357680731124530585915969709973988055743550083279071844959752353594644354789680372126344509423070253995102864458237454677761013556916212309752286152053213998745673034127676503369636682306665552051562491132528926155863868503100849180920507680658265915276163719928694258350604859732273949286080260640627521341007801815105623 787926212039424781833439433877206395801115809084190794320195178235740190546595990289617711776195270354051193727229722248442080440098750369411277686593022133010625031862085145076421052980508837197986052557750303949606158442838846866137510968441567309838079394349570013029265177957120625555851951313574029897589283475525334409858911400694449308432874005015554332587793895080241128538758725945136400838324944471346436826148195406004114845870234072926697740631325878634790667698266181501256117692275715291249164821702372884416357600996851100939411444677628186007072278522314941048564396255796808221289935799262208553889221164765220850367706476491496133789353761537391569177822237744837614120253342622508007300513473422771427333106345971803240244226950458
0905393266891036193819988388440362317952824354953624896707341559480676885153210730644760778596286278522836572445643064490962775171726569542383929419584095272532816595725345314283896298940058865394868241171139296273569389734829358546502786894370147983838260020582088535170732162887252145222052659696149621478848401290045077372524246050743396608181829602960191963141249985384220176951103613805617010163577435425311486693699941309409083682200719364351119785927824934914770521872265461091995972694391524004679011736025210300518860803370848401148102463512882639861700818048883807502035214483487408491547187144788578095745154995050050707894288428884100278777774559811323199406241765321486863165817367744100840634369599895192883108691245178663425593534582425894113905164694403775626658215778459368299096797545483505104736337708391510338546396027534864016352046338843423467149356414291608568467248742447820551137591682364722977936129710803025309344781155277375404589689903548080583093812673235935630985465643 762093853710528083446071890760033887816180198532737594985669167047034484383635034163683252664032241745194766781404283193274828518821403443193844454754567652534196591943321325854322700707590385652396682271713000091891220508451852615146279377175975288529786379317112125295294433237579100729090017035587637986124802814630939443919169501293363150452851635393128685864274372961094461012356048774398632996118997559659966087490492711676852686753359912975832090895532964095236401160600784950053778927837501473441221237779077271341466474044898375894876754232945468993542203416699613666989765299785807958990558640503885070831373330768397668824636809923552197272418317351276461891123804858831155694778881017597089776821496443403179244430851703036922141376211943
8864198950836033930645903736184293702871075832196660754611376107636254392861431624289075402108223362001230938473731222037426903383857992867857293943416828705376337409193818463226113174093427811791889164244751354347844604054945537983455616335381586844169205451869891943417538666390033575676560326436376790672162662033087842554515720811724638125151266984668588720901314486163256046101951337181458524998817662992514214501471020619319037367138034766343102970522241478503018827510634744624125870793733908509575772431673506688509420876153616444044375586016062583709130057416206527367094188866796457055074472471413700196816521595438069851599948336135752132210613188477192664194239535141223354674646149174301347586603733817653260455740292547227936028892618938589969565687678301718687398876388762597274397606281326344664767941367972618493339507466582044167798980660420393711666633669628256934909734839115586900485603251221924153426852236931603676549104770273352154014316833887296840544329696768403607318243533 622486543382359812354416751460834078116666185878173398062419925457785346267803903993755780275994295720528104377566697939683810934111895947576622019121753509363898546528307869237066251232368439023558763622832465716118371407880766116217951788797280184157201963908440026903745038119279717031448987181503131999211156390830301728801261064206200535924027827739391802639171772013612598477693398064706376302260888535993759507908878908179180219576803338196860512048710761087489841156874015995302063909813899326109553886826408401216083104052597453925157640373288908673694836640473462270856004089161078222194340517979455015534768296685532009750190558141991459112418150106225562741123157137735869719437413082202738384381594063857138791333759236233044045348723304
7240668784133333047898995255221468847973813568083995644533005222551320155267768895412770329278670827490041172076663112783638152343547681663121189086864991380236281775275946061211813342054791801619220346912760381900528012343973598270461499814511324618195658528232044658270082064934680251556511272822083811563192256509945201222666603226059396247019707668580396286975551115189973049085051758765306785758000660424066894170620303846785860257370634352599586885088679654004465187790208942935153217316750113738031466034642429489076322228133763299919641336502028627289268087560036613770607463575515079087982099722660130472907825746908175451952405573791313113170617323191598673971588373108168916968657704150695512947652386134815766967580364762005289060222744531744305498402863048850869557761528650326080941160688570698894762046478500884303973107412774191961697450517110329082815201273888663422631492147090220016940636504812047036016738602290671629816411198202268607961324739550057567564568204754619040423011062 371367395995678940884705976859514505017241517746017351430990972615509378334720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000