昨天突然想到的一个问题。。。。2的40960次方是多少。。。。因为如果直接来计算会溢出。好吧,拆开算25565的2560次方,依然会溢出。。。。。就连系统自带的计算器也算不出,会溢出。。。。
可是我就是想知道二的四万零九百六十次方到底是多少(强迫症)。。。。。于是想办法自己重新写个乘方的方式,用字符串拼起来,
一开始想了半天没想出来,和朋友讨论,朋友突然提醒道可以用我们平时人脑计算的方式,用进位的方式。我仔细一想,可行!于是今天就试着去实现了。
主要思路大概是这样(C#):
使用List泛型声明数组,这样就可以动态的往数组里添加项了。
List<int> numc = new List<int>(); List<string> stringnum=new List<string>();
接着声明一个LISTNUM字符串,用来储存数字,先将底数2填充。
接着就是写一个FOR循环,循环的次数就是指数的次数。
在循环里,第一步先将LISTNUM拆分成单独的每个数字,放进一个泛型数组里。
接着再写个FOR循环对数组里的每个数字都乘底数,同时将积继续拆分,取个位数重新复制到数组的这个项,
将除了各位的其余部分重新组成一个数字赋值到一个临时的变量tempnumc中,
然后在循环的开头在这个数字乘完底数之后加上这个临时的变量tempnumc接着将tempnumc改为0。
大致这样就可以将数字全部按位数分开成字符串装在一个LIST泛型数组中了,
其中遇到的几个需要注意的地方就是数字从个位往上是从左到右的,可是数组里放进去是从右到左,所以其中需要用到很多次改变数组排序的方法。
全部具体代码如下:
public string power(int basenum, int exp) { int numindex = 0; int tempnumc = 0; List<int> numc = new List<int>(); List<string> stringnum=new List<string>(); string listnum = basenum.ToString(); for (int c = 0; c < exp-1; c++)//乘多少次 { stringnum = chaifen(listnum);//将数字拆成字符串数组 for (int i = 0; i < stringnum.Count; i++)//遍历字符串数组 { int tcharnum = Convert.ToInt16(stringnum[i]); tcharnum = tcharnum * basenum;//乘以底数 tcharnum = tcharnum + tempnumc;//如果之前的计算有进位,先加上进位的数字并赋值TCHARNUM tempnumc = 0;//重置进位数字 if (tcharnum >= 10)//当结果大于10时 { List<string> ntcharnum = new List<string>(); ntcharnum = chaifen(tcharnum); ntcharnum.Reverse(0, ntcharnum.Count); tcharnum = Convert.ToInt32(ntcharnum[(ntcharnum.Count) - 1]);//将tcharnum取最后一位 string newstnum = ""; ntcharnum.Reverse(0, ntcharnum.Count); if (ntcharnum.Count > 2) { for (int i2 = 0; i2 < (ntcharnum.Count - 1); i2++) { ntcharnum.Reverse(0, ntcharnum.Count); newstnum += ntcharnum[i2]; ntcharnum.Reverse(0, ntcharnum.Count); } } else if (ntcharnum.Count == 2) //将除了最后一位的其余值赋给进位数 { newstnum += ntcharnum[1]; } int newintnum = Convert.ToInt32(newstnum); tempnumc = newintnum;//赋值进位数 } stringnum[i] = tcharnum.ToString();//于是这位数字为计算后的得出的最后一位 numindex = i; } if (tempnumc != 0) { string chearr = ""; try { chearr = stringnum[numindex + 1]; } catch { } if (chearr == "")//若后一位不存在 { stringnum.Add(tempnumc.ToString());//赋值进位数 tempnumc = 0;//重置进位数 } } listnum = ""; stringnum.Reverse(0, stringnum.Count); foreach (string i in stringnum) { listnum += i; } stringnum.Reverse(0, stringnum.Count); //Console.WriteLine(listnum); } return listnum; }
经过多次测试1024次方 2048次方 4096次方 都正确了。。。不过2的40960次方到底正确不正确我也不知道,因为计算器也算不出这个答案。。。。。。。所以没法验证。。
不过可能这个写法并不是很好,浪费内存不说。。。。算起来非常非常非常非常慢(超久)。。。。。嘛。。。不过总算算出结果了。。。。。。。总之。。。把结果贴出来好惹。。。。
2^40960=
1543911480654220647426107144917255136003340802514083845342250866531226047984769429063078758284069791580522475645807502356800257565656571494383372147075378477257383200184356151010228560512885536767519116735103397835230302684108687014418858282423987497183071194752610946518032681954391763163808422090748582101702632589547645594634707579462113035647034528968037259412072580163013140586315340049867852968915728420616926202948905749178105425845922453406970281423646818565926958133713060360754880767386171055829514482487150582735764720443472954646019970973939564920948257176725234937466847221094454175062446991202716193432537454644132455792907840014501269068987255611549449462780023619937138555588198704168590624107848151719276875022819254625196963932514288820018140442013720896821515683498128956714382188676775286488300046278271716774794927702962998456339494792125871900820350261932398335873506105974077102675018259929517802216813274805316522316869426618476210247334396977101998538215733124794516160041994444838293555943616258510049428168264063165057337961274023868670528014736499889336697998105343257309396250665545884343087076270102041154910695246082107230824003311961721102330935855217753983131299296735831635801669831473926003846675543147747788846857431641240056304683468164646832616927711048227283187366657997550942317355477154999643728160546569758521145746178509948718291512946617665820984377610181056535738348305007250107848671677625378454153202065765881648587606852658170525815689188334272041275882219542067975969463349597462312561860805284659561436333480368503683532163522633941010436988011857140149257917819233778913756971072389574212883236563338720111926193976376668063208020746344208575859718830452286883262866616969232731375363657762588509365941925475866788940965483223122906193089649213861880390799687971253377044824935480922618469599930896648491874734014175640307452161717004064153178653985171572406336535903613190425540089860296112028641161865512829088600128735968560781115085426894818245992797094514265925098510193188884577818835369115385840311572640210574836955165372244424134411945352409842172841070502735913503583912020634096684614028088918951663021318510134370503234358074181312621150613688669528249697048547416561125817931085934366668997711533390477924007895349899302740179989848649322987814123300940584897161328114942469957230205076686466500663796538730899208502987821319045990032052273492457591539399899427400837179778886058716684718028814494451446024345026888282586672589711977156285520551631770313804178102724649950824019476724791620989946452902577672162359917674063544341682072228319649070375821914464779403566687643391027384216302603069293965344365862434106090535753185172644527750901456460474161133169215440110855311973478755350767704146597307603771964373546398799537632543253424714476232148561286075975941045350425779131861447374691957874984639911451966120675810808363592519977072534112016334925608025863166088980100475489458661583503658291157258140707743214538103836439698667722796399244827572650145267224494394284610868281219846909424901977338747127246438290760275335300582188251947503860005381778119217457841189347583830958299186774690014702522931420560172079643709543143715277371411064069444316288519263003557772675630786632941522484650955913980965648716755146140204339808105593351124900958184994749650392266580633091882184072131556536012490865385994424941271228753915254512573982421403093567763496440461345492986608233767893744544317768070363902848266617439730424234125841462370698634875089625075286784296588780367421288066817062906413889014216657679699197133548253403068642795110755789649193408091268606903394983117608739972314009339732350241044966120049949981879384958273545723741301520219558898577065951145952447758882779881861964164922905249193199650108035455544697695198411037681218730772697176538338981408319917407810040099688012574103993576344321576067751345307428253464697160476011557900211280170297666847617044066119007566135324171315079138837098215132983630933458469979282182918854096063799296298528394615008021099365208843522987041299411316520308160761121984045283034631384925022134436025870074334355006766370906797947905894770282605149127550733542619189714085312642140075935621577432053719318747668394544116478770731258429292462573311304109785007665775015201862814284096400998694694374161800766177030307322629369073526388093131773970811696905333002139904458004715128908000533723080230095946593505372577547861492305107516878677717388401084518577971357561861268669080759143510467815936163944657569918591800997478321877799003456685317729451971272863194308485373146271660381758938984362404436393928108199825718602523610191769027122856380384272404980942617162494428139387498486832522422180818364100361840083597165048653831763792183671708884892958930764712008891830020005421844822344848443655773502866543237389063393515117050224033236815421874967859572940815881234982054169515133895464205193767618381679043301564073369902260373143062776416110585484066291539156473990576650312282947109359334493411651924503944912469554292731880073341787346504184052261406954642385340489187710891021065556338755309438776568956190014575331871974019111854175591148749007476444661605645335405468402454518580040875256527055442184198764421210716751799568274032110674759397932806842021704218329843247508035240970615597515406166243209022870173237621017295029248894852485630251254403693920287235723976534657639778619230312053594649943482307116221964305248801456350529945082444962159909645120200143046950302328795807349045766355723582342721910864350217361263637584608821672816994074339113552021081256236670875757812060023591934385308442675188241382472029171619415878889619409109944894148729986153483893653192327766703586120045063666435321275178166215713892549287076659527827507485730351053575705935259440152806011191656888140375801295636548660086440216743918253348455273583457251847048787582190824897877043225005718086503488399933415459514827273010226056743859562404243156872638048941465452878237338057842234395090307984482982752037405199230725552109584846962705974784200729842482065201175429590423310868506317455234401932958475582740231273985445785312607552406497334708453695160934350166745514494156880559593841232590543577678957188156220530748793172577130454842362081990478764318058911093336796611113352069981309806812124994037712563346949278258837244538611909439183459306260394293822044376578159700324578482766362760173746372089434002450800803411798923674530808021290053449191970254782296657569645271499380869477649986061755982527106171096140528469417192501393962467100390804975305535685422833300675577107980544600651200915903950691944488539035049823152489225407299117589968465441778219872030692375836064683250477747100211887110479817915952281285633887946687532810895685724789245902585076832426154389063470811082767959549405857414624760480006265786979460673002408325309922279785185138502961290830490875281663015342547846437048922932584899095995361834648022867274987002154507954084149508996912490489257831555277931576425134086805132306823011789379225688380232626369039339696178764833334758194812013101650988556838837985950902957083296660440768488316324996914323144577137569319969328015361524481213846767267385228504102634049520644439919762282797738425796059368998034599070630231914122406687741671811473556084251392365918871752838099209450752041511575880958700737366560850967138568363857914681569425640212650494377856987244644891795975304336589611803620343027462200499408040896975085914126208830592439557486063309495595574849854040109808822701674333842149367355072863435973063341522057489524758735499453060971447590644037580081983587638467685359398196750255570583504312212169387865405184487170454655313910774494145745695921823807963529450206836966590923582910980130887504365450392815027251039060137732062957667838919241621578890533343247457115539911821792121984625449445109343720874133040234624120419585428723043662416575891267008357257760398185790624496928887247922739102137763069610068462280176019071084027660237881393818143259509196051536424854911400065379917348274478173126353325712126232946636937856701646014206257943329508835775214959508740380124742067999767743188523499850335534270374114281998973714624526534737814440456368817911491372765836899375539198660202407480793442787939204079370554443543926042286401195247307076916218513094375233277624430745128403020534291006983742126619783856444284124147797635599522539567526607254526322436654390683827299568741695800418385562547368059002817724528196407421086744043192418584031301505340653139233950916612663841522382169107461465019460569408518094438362587936960920290001643795167268590640501639372194366082440999850526351717857429687729125402628914529129278144898950170286158149653430742205952740863853526065262504912444421612317226664924527890900586365449018904766151427616303396930456284462515708087980007669226512056959117089352793858347243078539509988347649949912751815168368280198866865251749313037214018033040846247036798999942720336324448731445716369775850934582364843785725500093468796858028591288698153331049748957755858014710067740629184456278617877897078465779534521539715143205521704824197784513346178607766440122449630404836034169368316800876747843817744949403111534780244688984597923284049365438773159367935115215095581990219432071979814428622677064063444793658360069527649628030883088524313418894364867742869664703827935881876718916219818535508900250654654037463043996531802447960814320924067467164155292589223208384115854191239437525037499414524109173343850719213721487901810302400573222058147381696157808574801048423162628233398834115289796227752432002075399379619378810246071592255457891683993426463955724502310348415626920724927498755714596214253898077820505369533005566815464566352400347497820340854615881163859427182607921825085461262950038559624986367668258984924641780451339283373985710021344675554338322561862886036051345575471301085102465314822107236405563100552265486775275363249104885405745595892757978500165187969502592560334407740127736532682714122555634661394143271106607664183124970033366102498238183930857283958100434336069047514718453818456486511553953113892563659842534647047727956478658631482132770410913378501967877036676256253202008310335035183756644079721637372347100813222468220788255101204109733234342510865781273799661271723416192701387730647911518661580536614141214589219365157239759582803557145410425659965195759391916671538659101119974984941500395234109223645848646957397640398206615066773610424389336155562250414349041984791230598463077598102088355363051244494497707767820583863836192133002335620818118767325857703849949650177326233269603561376185629715481075372549336157667180110571788843370459154489738981844084172097165617681718645689943095247445592835868896964199284628352423675784050077385715721237466538400553521363588219770180776902703748597102802233157600461100193644009165807904564602068792702885789326962610662310364020493710031927298228370017664943416631893535867583143186286899554055927278413418321291117682715683672300909729192319838715254612404349287561966744702587303794078138669115520684742812194535576936355997002384180913107143723745723596541787302881694293952966301772096278926517279961457012259540746840145048522691500118281974398538140572800249575448788251415551020954161654199169829343718073252115551360560960940705612450360319407942007625677876241549671740599624581682486445769115041853616769013707585739830494284224372461897822017334233644447596433018323913839736438931509044951073328008384982675974440334530855191827993714203079708984880226838879926212712772491016813597886171624637677939873955099168854030833243635995441976462283029001385902947651638398747639681926791443297806613639458160428651811106628893508265526280677347358068641512119050931344521373909998462357708948730242775218221868616149166150179089599991019763715512158541692809402410602119873568463628404380039906224863488165323180845249360719634806943756769801922492415918836765985144531067072142722376905064130869176251070070248930731422382104402039953324843408132506670886963612603272430365686292536731496683562333199293008011325647354319091881143684598293609313223865777701789767649808579859845164810952431122773082427206592422103507748769469161162205072766932634201004166203618654357286706235169959436278495750277640529723776592510976
源代码下载:
http://yunpan.cn/Qa4rf4L46escs 提取码 1e60