大数阶乘的计算.docx

上传人:b****3 文档编号:5445635 上传时间:2022-12-16 格式:DOCX 页数:23 大小:30.66KB
下载 相关 举报
大数阶乘的计算.docx_第1页
第1页 / 共23页
大数阶乘的计算.docx_第2页
第2页 / 共23页
大数阶乘的计算.docx_第3页
第3页 / 共23页
大数阶乘的计算.docx_第4页
第4页 / 共23页
大数阶乘的计算.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

大数阶乘的计算.docx

《大数阶乘的计算.docx》由会员分享,可在线阅读,更多相关《大数阶乘的计算.docx(23页珍藏版)》请在冰豆网上搜索。

大数阶乘的计算.docx

大数阶乘的计算

大数阶乘的计算

(一)

 

来源:

互联网作者:

发布:

我要购物网收集整理发布时间:

2006-8-31人气:

115

 

整数n的阶乘指1*2*3*...*(n-1)*n的值,在n=171时,计算机一般会出错(“溢出”),本文采用字符串模拟数字乘法运算,使计算10000!

成为可能:

Functionmulti(ByValXAsString,ByValYAsString)AsString'multioftwohugehexnum(两个大数之积)

DimresultAsVariant

DimxlAsLong,ylAsLong,tempAsLong,iAsLong

xl=Len(Trim(X))

yl=Len(Trim(Y))

ReDimresult(1Toxl+yl)

Fori=1Toxl

Fortemp=1Toyl

result(i+temp)=result(i+temp)+Val(Mid(X,i,1))*Val(Mid(Y,temp,1))

Next

Next

Fori=xl+ylTo2Step-1

temp=result(i)\10

result(i)=result(i)Mod10

result(i-1)=result(i-1)+temp

Next

Ifresult

(1)="0"Thenresult

(1)=""

multi=Join(result,"")

Eraseresult

EndFunction

PrivateSubCommand1_Click()'节约时间,算到1000!

Fori=1To9

calcfactoriali*100

Next

EndSub

 

Subcalcfactorial(ByValnAsInteger)

Dima()AsString,iAsLong,stimerAsDouble

ReDima(1Ton)

a

(1)=1

stimer=Timer

Fori=2Ton

a(i)=multi(a(i-1),i)

Next

Debug.Printn&"!

用时";Timer-stimer&"秒,结果"&Len(a(n))&"位"

Debug.Printa(n)

EndSub

 

100!

用时4.67617187496217E-02秒,结果158位

200!

用时.407124999999724秒,结果375位

300!

用时1.00012499999957秒,结果615位

400!

用时1.92199999999957秒,结果869位

500!

用时3.14013671875秒,结果1135位

600!

用时4.68677343750005秒,结果1409位

700!

用时6.64099999999962秒,结果1690位

800!

用时8.9208984375秒,结果1977位

900!

用时11.5000117187501秒,结果2270位

1000!

用时14.5621367187496秒,结果2568位

----------------------

 

来源:

互联网作者:

发布:

我要购物网收集整理发布时间:

2006-8-31人气:

137

 

与笔者的另一算法(

 

Subcalcfactorial(ByValnAsInteger)

DimXYS()AsInteger,x()AsInteger,y()AsInteger,result()AsString,iAsLong,jAsLong,kAsLong,TEMPAsLong,stimerAsDouble

Ifn<0ThenExitSub

ReDimx

(1)

ReDimXYS

(1)

x

(1)=1

XYS

(1)=1

k=1

stimer=Timer

DoWhilek<=n

TEMP=Len(CStr(k))

ReDimy(1ToTEMP)

Fori=1ToTEMP

y(i)=Val(Mid(k,i,1))

Next

ReDimXYS(LBound(x)ToUBound(x)+UBound(y))

Fori=LBound(x)ToUBound(x)

Forj=1ToUBound(y)

XYS(i+j)=XYS(i+j)+x(i)*y(j)

Next

Next

Fori=UBound(x)+UBound(y)ToLBound(x)+1Step-1

TEMP=XYS(i)\10

XYS(i)=XYS(i)Mod10

XYS(i-1)=XYS(i-1)+TEMP

Next

x=XYS

k=k+1

Loop

ReDimresult(1ToUBound(x))

i=1

DoWhilex(i)=0'消除结果前边的多个“0”

result(i)=""

i=i+1

Loop

DoWhileNoti>UBound(x)

result(i)=x(i)

i=i+1

Loop

factorial=Join(result,"")

Debug.Printk-1&"!

用时";Timer-stimer&"秒,结果"&Len(factorial)&"位"

'Debug.Printfactorial

Erasex()

Erasey()

EraseXYS()

Eraseresult()

EndSub

 

PrivateSubCommand1_Click()

Fori=1To10

calcfactoriali*1000

Next

 

EndSub

上述过程中,每步的计算结果得到的数组,开始的若干元素总有无效的“0”,导致时间和内存资源的浪费,而且数值越大,无效运算就越多。

苦苦思索不得更有效的解决方法,请各位算法高手指教。

输出结果:

100!

用时.015625秒,结果158位

200!

用时.0471********秒,结果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!

=422857792660554352220106420023358440539078667462664674884978240218135805270810820069089904787170638753708474665730068544587848606668381273633721089377278763127939036305846216064390447898698223987192970889621161265296832177550039924219683703146907264472878789790404754884162215226671928410969236910449565971736352948400223840381120644820230857671104502306174894755428309761781724040805324809927809328784055486199364548291211876258248802189173977900050213212598043639244626460770511358846595108675470585833924655225589035474435988347383178988034633008458631510209091509935653820010933047965742556741930917055172805200236075085991197635228755907902043369743123506916831211924495971556267407521462198986233088625998302859864857578749445963115286970886710046268423648178989905454690861391613218344174148807186234448114831209490361196546872767755617886828720269104814092456410341835975604276458161513178575901661071782544156980883359372729995603371371200471049437656291142488605335299499642300699972204918120100819059439140675053265004775533850899097945101551091486907004407119572336026243368132330218709287699196806656569752790422258267841561083376425781032629202687211070274681394351128601502326190649959171897364176378436491219709109840944514895358959103804176941956657834822071749105512752639148381172052604826965162642710094919393332661030104360530459117014557209584714353721948246686793467375904872268133410207860903657108806376616249749507413107077401682180585945526445171409277469230062697511346044174567946735828782261629584248675157379172942724178783105429858245117575511884506574424827574660800238588378492396247368761507015767725898321128632295537044902516387925127590841791744640466913531047347984464996154595542013996317357476301740036796192919942190762895445656261767041799538161133387312823511534152581309087915883638351664797225912944270653557142511737323807232632958121797916679692329687096923901003255574789055099807487061047230646195984955239657612208673866514171699307557691897902675157342075864796345338446835085965490727326321910504064289713096224505162064669468098869917122127404504020684923266241760132910227866687270305284709452526825496617772499645206699836925910690894082637401043498371591126455822280606361394115344316771769934353664284928294436414769615881993661388255577487709937004594753907845149034434521174560594039916268444697661821387470705325559577933196460996662145377564935474169708562389214773222865507182490430016186142192760452307670621142961767274704123616107220009743758647492753665149532164780849075146330071016691313420662882562618283865836983632108760710427516073348347788414796732427080410860761841281888307115098982135338406610652147087046874760995427473673509451553599769040367353385551052571682650317682405743993414862392331981432579182193321898940450865013610998098383993110996355981328001049731588596312131853801205046787642910669365600437305633431984879048998524701293300789344532868156679762880495532846386020133480265279836946393384995675049993707814746561543438930431384237878981847802886009971088695632988347711863122382785963653115132377931373647397429369411499028751972227999545182615488298951151926682112451355318472209990435355949887299922035062039816011086376236539782172380237846650673624510635034423187315338308212043804710999419227821039747552717416043890169723961305549371844836119803565896062025009093664399360172007383613354405094329072476518909502507724675841989412224659392163116352038147362479528539732089309533421910635702805576629720156556510767780805933453631121829561792887673002802450932122778852968418208261778476955644980385691275787372678040959158711733971103165232678060798127609246173504120182666874262805385275843979167609007743380748420751185119102921960339376280986753665085212869255321536787932521882574101866137054328973735862725370178558806639851350386944039604928258820180419178073649693885802597758398892014389747165465973510852605706234402069637065660129535734043582961473427275805630839510667375349259659518575646939723218275780003250593895303820539697558870511543073920827422440516299708739599768461206246629098112368012579891284802505094028916959765079395437191311379314427405135599630375642214527294341797246187597964074239147838993541565834716156858499036773056611353833367087548900413091981676330749041510337597307246885839246941715548295730750618505881581959528992660225626903439573313450666972952115230668696227920947779974336574472673471408928071411283888082693377378077293104110767513639476200610858040596019639058015761002337463869352228385801434957178125581445862930042479404065736859862007914604590255413929950088044710384758990326548097338166940500085452723713571394902463820308668541802838317527668064278489561005755859991718966786449154063570014497194249878920859731254275567514575206399118150736397483102490793841725653421894276769116598153430084637087769510295415136551734675054015239706042571746001089968440498845985477977905031632568489156557231006499726498721480800181770357701502983008879487243887718884416833034708723239505377642232944095773219137582371673924704216723002256883135779230394688900662466182532658490724406767024939579697217467485562998183149665611743997680482094166257463879660305171274925119226367615337524381656217330771650129520988754856467131862602387619964334867961514408328902061082833180891221325853682856469916007952105166960451695430614212305743006877217407155473217957577017595967640563812729153867513698712395570542350999228605975469962186195531354132139126436676900465429996811680550737866770665988027062972502001882845886145344368771455361304414465613369092862748276981946836480550952968681758714859972973082332924094777085275279923304892719633314751563311192746150389219290616780607901383451137066300684376267199885515143681266137319912103235469786756421210624899005553564022924345831264231038363416781719908354140411717740185950606674198348143345444247191436828225654380047860390575922417071802670646875454211626958746795398540784464654140381751149965273621123540880166990280149033225139460832668170930713868826549977374286127789417784752681328371818759103642140881783220739808059714203285309721443041845459183002833408705783138284973283

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1