超大数字的操作

来源:互联网 发布:淘宝退款灰色项目 编辑:程序博客网 时间:2024/04/26 14:06

问题来源:

http://topic.csdn.net/u/20091209/16/41034134-2088-485b-9e16-f46e6574cd20.html?seed=1247131905&r=61791844#r_61791844

怎么求2的n次方的最高位和次高位(十进制)?
如,2^4=16,最高位是 "1",次高位是"6"。

1,n可以不限定在32或者64之内,如 n=10000000 也是合法的。

(希望身体力行)

问题可以转化为:“在32位系统中,如何纯软件实现将64位甚至1024位或者更高位的整型数据格式化为十进制输出?”

using System;
using System.Collections.Generic;
using System.Text;

//怎么求2的n次方的最高位和次高位(十进制)?
//这个问题完全可以模拟小学的乘法,只是不能保证效率,如果N>10000的话,可能要稍微等一下
//大数字用内置的数字类型是放不下了,就用一个列表吧

namespace ConsoleApplication2{    class Program    {        //对一个可能非常大的数字翻倍        static List<short> Double(List<short> muls)        {            List<short> ret = new List<short>();                                    for (int i = 0; i < muls.Count; ++i)                ret.Add(0);            short moveV = 0;            for (int i = muls.Count - 1; i >= 0; --i)            {                short tmp = (short)(muls[i] * 2);                ret[i] = (short)(tmp % 10 + moveV);                moveV =(short)(tmp / 10);             }            if (moveV > 0)            {                ret .Insert(0, moveV);            }            return ret;        }        //将数字串转换为List<Short>        static List<short> ConvertFtomString(string str)        {            foreach (char c in str)                System.Diagnostics.Debug.Assert(char.IsDigit(c));            List<short> ret = new List<short>();            foreach (char c in str)                ret.Add((short)(c - '0'));            return ret;         }        //求2的n次方        static List<short> SqrtForTwo(int n)        {            System.Diagnostics.Debug.Assert(n >= 0);            List<short> ret = new List<short>();            ret.Add(1);            for (int i = 1; i <= n; ++i)                ret = Double(ret);            return ret;        }        static void Print(List<short> lst)        {            foreach (short i in lst)                Console.Write(i);            Console.WriteLine();         }        static void Main(string[] args)        {            List<short> muls = ConvertFtomString("987654321");            List<short> ret = Double(muls);            for (int i = 0; i < 21; ++i)            {                List<short> tt = SqrtForTwo(i);                Console.Write("2的{0}次方等于:\t\t", i);                Print (tt);            }            for (int i = 2000; i < 2020; ++i)            {                List<short> tt = SqrtForTwo(i);                Console.Write("2的{0}次方等于:\t\t", i);                Print(tt);            }            Console.ReadKey();        }    }}


 

2的0次方等于:  1
2的1次方等于:  2
2的2次方等于:  4
2的3次方等于:  8
2的4次方等于:  16
2的5次方等于:  32
2的6次方等于:  64
2的7次方等于:  128
2的8次方等于:  256
2的9次方等于:  512
2的10次方等于:  1024
2的11次方等于:  2048
2的12次方等于:  4096
2的13次方等于:  8192
2的14次方等于:  16384
2的15次方等于:  32768
2的16次方等于:  65536
2的17次方等于:  131072
2的18次方等于:  262144
2的19次方等于:  524288
2的20次方等于:  1048576
2的2000次方等于:  114813069527425452423283320117768198402231770208869520047764273682576626139237031385665948631650626991844596463898746277344711896086305533142593135616665318539129989145312280000688779148240044871428926990063486244781615463646388363947317026040466353970904996558162398808944629605623311649536164221970332681344168908984458505602379484807914058900934776500429002716706625830522008132236281291761267883317206598995396418127021779858404042159853183251540889433902091920554957783589672039160081957216630582755380425583726015528348786419432054508915275783882625175435528800822842770817965453762184851149029376
2的2001次方等于:  229626139054850904846566640235536396804463540417739040095528547365153252278474062771331897263301253983689192927797492554689423792172611066285186271233330637078259978290624560001377558296480089742857853980126972489563230927292776727894634052080932707941809993116324797617889259211246623299072328443940665362688337817968917011204758969615828117801869553000858005433413251661044016264472562583522535766634413197990792836254043559716808084319706366503081778867804183841109915567179344078320163914433261165510760851167452031056697572838864109017830551567765250350871057601645685541635930907524369702298058752
2的2002次方等于:  459252278109701809693133280471072793608927080835478080191057094730306504556948125542663794526602507967378385855594985109378847584345222132570372542466661274156519956581249120002755116592960179485715707960253944979126461854585553455789268104161865415883619986232649595235778518422493246598144656887881330725376675635937834022409517939231656235603739106001716010866826503322088032528945125167045071533268826395981585672508087119433616168639412733006163557735608367682219831134358688156640327828866522331021521702334904062113395145677728218035661103135530500701742115203291371083271861815048739404596117504
2的2003次方等于:  918504556219403619386266560942145587217854161670956160382114189460613009113896251085327589053205015934756771711189970218757695168690444265140745084933322548313039913162498240005510233185920358971431415920507889958252923709171106911578536208323730831767239972465299190471557036844986493196289313775762661450753351271875668044819035878463312471207478212003432021733653006644176065057890250334090143066537652791963171345016174238867232337278825466012327115471216735364439662268717376313280655657733044662043043404669808124226790291355456436071322206271061001403484230406582742166543723630097478809192235008
2的2004次方等于: 1837009112438807238772533121884291174435708323341912320764228378921226018227792502170655178106410031869513543422379940437515390337380888530281490169866645096626079826324996480011020466371840717942862831841015779916505847418342213823157072416647461663534479944930598380943114073689972986392578627551525322901506702543751336089638071756926624942414956424006864043467306013288352130115780500668180286133075305583926342690032348477734464674557650932024654230942433470728879324537434752626561311315466089324086086809339616248453580582710912872142644412542122002806968460813165484333087447260194957618384470016
2的2005次方等于:  3674018224877614477545066243768582348871416646683824641528456757842452036455585004341310356212820063739027086844759880875030780674761777060562980339733290193252159652649992960022040932743681435885725663682031559833011694836684427646314144833294923327068959889861196761886228147379945972785157255103050645803013405087502672179276143513853249884829912848013728086934612026576704260231561001336360572266150611167852685380064696955468929349115301864049308461884866941457758649074869505253122622630932178648172173618679232496907161165421825744285288825084244005613936921626330968666174894520389915236768940032
2的2006次方等于:  7348036449755228955090132487537164697742833293367649283056913515684904072911170008682620712425640127478054173689519761750061561349523554121125960679466580386504319305299985920044081865487362871771451327364063119666023389673368855292628289666589846654137919779722393523772456294759891945570314510206101291606026810175005344358552287027706499769659825696027456173869224053153408520463122002672721144532301222335705370760129393910937858698230603728098616923769733882915517298149739010506245245261864357296344347237358464993814322330843651488570577650168488011227873843252661937332349789040779830473537880064
2的2007次方等于: 14696072899510457910180264975074329395485666586735298566113827031369808145822340017365241424851280254956108347379039523500123122699047108242251921358933160773008638610599971840088163730974725743542902654728126239332046779346737710585256579333179693308275839559444787047544912589519783891140629020412202583212053620350010688717104574055412999539319651392054912347738448106306817040926244005345442289064602444671410741520258787821875717396461207456197233847539467765831034596299478021012490490523728714592688694474716929987628644661687302977141155300336976022455747686505323874664699578081559660947075760128
2的2008次方等于:  29392145799020915820360529950148658790971333173470597132227654062739616291644680034730482849702560509912216694758079047000246245398094216484503842717866321546017277221199943680176327461949451487085805309456252478664093558693475421170513158666359386616551679118889574095089825179039567782281258040824405166424107240700021377434209148110825999078639302784109824695476896212613634081852488010690884578129204889342821483040517575643751434792922414912394467695078935531662069192598956042024980981047457429185377388949433859975257289323374605954282310600673952044911495373010647749329399156163119321894151520256
2的2009次方等于:  58784291598041831640721059900297317581942666346941194264455308125479232583289360069460965699405121019824433389516158094000492490796188432969007685435732643092034554442399887360352654923898902974171610618912504957328187117386950842341026317332718773233103358237779148190179650358079135564562516081648810332848214481400042754868418296221651998157278605568219649390953792425227268163704976021381769156258409778685642966081035151287502869585844829824788935390157871063324138385197912084049961962094914858370754777898867719950514578646749211908564621201347904089822990746021295498658798312326238643788303040512
2的2010次方等于: 117568583196083663281442119800594635163885332693882388528910616250958465166578720138921931398810242039648866779032316188000984981592376865938015370871465286184069108884799774720705309847797805948343221237825009914656374234773901684682052634665437546466206716475558296380359300716158271129125032163297620665696428962800085509736836592443303996314557211136439298781907584850454536327409952042763538312516819557371285932162070302575005739171689659649577870780315742126648276770395824168099923924189829716741509555797735439901029157293498423817129242402695808179645981492042590997317596624652477287576606081024
2的2011次方等于:  235137166392167326562884239601189270327770665387764777057821232501916930333157440277843862797620484079297733558064632376001969963184753731876030741742930572368138217769599549441410619695595611896686442475650019829312748469547803369364105269330875092932413432951116592760718601432316542258250064326595241331392857925600171019473673184886607992629114422272878597563815169700909072654819904085527076625033639114742571864324140605150011478343379319299155741560631484253296553540791648336199847848379659433483019111595470879802058314586996847634258484805391616359291962984085181994635193249304954575153212162048
2的2012次方等于:  470274332784334653125768479202378540655541330775529554115642465003833860666314880555687725595240968158595467116129264752003939926369507463752061483485861144736276435539199098882821239391191223793372884951300039658625496939095606738728210538661750185864826865902233185521437202864633084516500128653190482662785715851200342038947346369773215985258228844545757195127630339401818145309639808171054153250067278229485143728648281210300022956686758638598311483121262968506593107081583296672399695696759318866966038223190941759604116629173993695268516969610783232718583925968170363989270386498609909150306424324096
2的2013次方等于:  940548665568669306251536958404757081311082661551059108231284930007667721332629761111375451190481936317190934232258529504007879852739014927504122966971722289472552871078398197765642478782382447586745769902600079317250993878191213477456421077323500371729653731804466371042874405729266169033000257306380965325571431702400684077894692739546431970516457689091514390255260678803636290619279616342108306500134556458970287457296562420600045913373517277196622966242525937013186214163166593344799391393518637733932076446381883519208233258347987390537033939221566465437167851936340727978540772997219818300612848648192
2的2014次方等于: 1881097331137338612503073916809514162622165323102118216462569860015335442665259522222750902380963872634381868464517059008015759705478029855008245933943444578945105742156796395531284957564764895173491539805200158634501987756382426954912842154647000743459307463608932742085748811458532338066000514612761930651142863404801368155789385479092863941032915378183028780510521357607272581238559232684216613000269112917940574914593124841200091826747034554393245932485051874026372428326333186689598782787037275467864152892763767038416466516695974781074067878443132930874335703872681455957081545994439636601225697296384
2的2015次方等于:  3762194662274677225006147833619028325244330646204236432925139720030670885330519044445501804761927745268763736929034118016031519410956059710016491867886889157890211484313592791062569915129529790346983079610400317269003975512764853909825684309294001486918614927217865484171497622917064676132001029225523861302285726809602736311578770958185727882065830756366057561021042715214545162477118465368433226000538225835881149829186249682400183653494069108786491864970103748052744856652666373379197565574074550935728305785527534076832933033391949562148135756886265861748671407745362911914163091988879273202451394592768
2的2016次方等于:  7524389324549354450012295667238056650488661292408472865850279440061341770661038088891003609523855490537527473858068236032063038821912119420032983735773778315780422968627185582125139830259059580693966159220800634538007951025529707819651368618588002973837229854435730968342995245834129352264002058451047722604571453619205472623157541916371455764131661512732115122042085430429090324954236930736866452001076451671762299658372499364800367306988138217572983729940207496105489713305332746758395131148149101871456611571055068153665866066783899124296271513772531723497342815490725823828326183977758546404902789185536
2的2017次方等于: 15048778649098708900024591334476113300977322584816945731700558880122683541322076177782007219047710981075054947716136472064126077643824238840065967471547556631560845937254371164250279660518119161387932318441601269076015902051059415639302737237176005947674459708871461936685990491668258704528004116902095445209142907238410945246315083832742911528263323025464230244084170860858180649908473861473732904002152903343524599316744998729600734613976276435145967459880414992210979426610665493516790262296298203742913223142110136307331732133567798248592543027545063446994685630981451647656652367955517092809805578371072
2的2018次方等于:  30097557298197417800049182668952226601954645169633891463401117760245367082644152355564014438095421962150109895432272944128252155287648477680131934943095113263121691874508742328500559321036238322775864636883202538152031804102118831278605474474352011895348919417742923873371980983336517409056008233804190890418285814476821890492630167665485823056526646050928460488168341721716361299816947722947465808004305806687049198633489997459201469227952552870291934919760829984421958853221330987033580524592596407485826446284220272614663464267135596497185086055090126893989371261962903295313304735911034185619611156742144
2的2019次方等于:  60195114596394835600098365337904453203909290339267782926802235520490734165288304711128028876190843924300219790864545888256504310575296955360263869886190226526243383749017484657001118642072476645551729273766405076304063608204237662557210948948704023790697838835485847746743961966673034818112016467608381780836571628953643780985260335330971646113053292101856920976336683443432722599633895445894931616008611613374098397266979994918402938455905105740583869839521659968843917706442661974067161049185192814971652892568440545229326928534271192994370172110180253787978742523925806590626609471822068371239222313484288