python如何为非常大的整数存储值

时间:2014-12-10 17:08:04

标签: python largenumber

看看这个简单的python程序

def fib1(n):
a, b = 0, 1
while b < n :
    print b,
    a, b = b, a+b

if __name__ == '__main__':
import sys
fib1(int(sys.argv[1]))

如果将此代码作为

运行
python fibo.py 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

输出片段:

1303467741340483121659023383282949754951354892487032836821556660754115695648928602663356832403903120316774306 2109055108727958115216736026700200421586510355834736601003381505407930071607408184616335724173657853423941515 3412522850068441236875759409983150176537865248321769437824938166162045767256336787279692556577560973740715821 5521577958796399352092495436683350598124375604156506038828319671569975838863744971896028280751218827164657336 8934100808864840588968254846666500774662240852478275476653257837732021606120081759175720837328779800905373157 14455678767661239941060750283349851372786616456634781515481577509301997444983826731071749118079998628070030493 23389779576526080530029005130016352147448857309113056992134835347034019051103908490247469955408778428975403650 37845458344187320471089755413366203520235473765747838507616412856336016496087735221319219073488777057045434143 61235237920713401001118760543382555667684331074860895499751248203370035547191643711566689028897555486020837793 99080696264900721472208515956748759187919804840608734007367661059706052043279378932885908102386332543066271936 160315934185614122473327276500131314855604135915469629507118909263076087590471022644452597131283888029087109729 259396630450514843945535792456880074043523940756078363514486570322782139633750401577338505233670220572153381665 419712564636128966418863068957011388899128076671547993021605479585858227224221424221791102364954108601240491394 679109195086643810364398861413891462942652017427626356536092049908640366857971825799129607598624329173393873059 1098821759722772776783261930370902851841780094099174349557697529494498594082193250020920709963578437774634364453 1777930954809416587147660791784794314784432111526800706093789579403138960940165075820050317562202766948028237512 2876752714532189363930922722155697166626212205625975055651487108897637555022358325840971027525781204722662601965 4654683669341605951078583513940491481410644317152775761745276688300776515962523401661021345087983971670690839477 7531436383873795315009506236096188648036856522778750817396763797198414070984881727501992372613765176393353441442 12186120053215401266088089750036680129447500839931526579142040485499190586947405129163013717701749148064044280919 19717556437089196581097595986132868777484357362710277396538804282697604657932286856665006090315514324457397722361 31903676490304597847185685736169548906931858202641803975680844768196795244879691985828019808017263472521442003280 51621232927393794428283281722302417684416215565352081372219649050894399902811978842493025898332777796978839725641 83524909417698392275468967458471966591348073767993885347900493819091195147691670828321045706350041269500281728921 135146142345092186703752249180774384275764289333345966720120142869985595050503649670814071604682819066479121454562 218671051762790578979221216639246350867112363101339852068020636689076790198195320499135117311032860335979403183483 353817194107882765682973465820020735142876652434685818788140779559062385248698970169949188915715679402458524638045 572488245870673344662194682459267086009989015536025670856161416248139175446894290669084306226748539738437927821528 926305439978556110345168148279287821152865667970711489644302195807201560695593260839033495142464219140896452459573 1498793685849229455007362830738554907162854683506737160500463612055340736142487551508117801369212758879334380281101 2425099125827785565352530979017842728315720351477448650144765807862542296838080812347151296511676978020230832740674 3923892811677015020359893809756397635478575034984185810645229419917883032980568363855269097880889736899565213021775 6348991937504800585712424788774240363794295386461634460789995227780425329818649176202420394392566714919796045762449 10272884749181815606072318598530637999272870421445820271435224647698308362799217540057689492273456451819361258784224 16621876686686616191784743387304878363067165807907454732225219875478733692617866716260109886666023166739157304546673 26894761435868431797857061985835516362340036229353275003660444523177042055417084256317799378939479618558518563330897 43516638122555047989641805373140394725407202037260729735885664398655775748034950972577909265605502785297675867877570 70411399558423479787498867358975911087747238266614004739546108921832817803452035228895708644544982403856194431208467 113928037680978527777140672732116305813154440303874734475431773320488593551486986201473617910150485189153870299086037 184339437239402007564639540091092216900901678570488739214977882242321411354939021430369326554695467593010064730294504 298267474920380535341780212823208522714056118874363473690409655562810004906426007631842944464845952782163935029380541 482606912159782542906419752914300739614957797444852212905387537805131416261365029062212271019541420375173999759675045 780874387080163078248199965737509262329013916319215686595797193367941421167791036694055215484387373157337934789055586 1263481299239945621154619718651810001943971713764067899501184731173072837429156065756267486503928793532511934548730631 2044355686320108699402819684389319264272985630083283586096981924541014258596947102450322701988316166689849869337786217 3307836985560054320557439403041129266216957343847351485598166655714087096026103168206590188492244960222361803886516848 5352192671880163019960259087430448530489942973930635071695148580255101354623050270656912890480561126912211673224303065 8660029657440217340517698490471577796706900317777986557293315235969188450649153438863503078972806087134573477110819913 14012222329320380360477957577902026327196843291708621628988463816224289805272203709520415969453367214046785150335122978 22672251986760597700995656068373604123903743609486608186281779052193478255921357148383919048426173301181358627445942891 36684474316080978061473613646275630451100586901195229815270242868417768061193560857904335017879540515228143777781065869 59356726302841575762469269714649234575004330510681838001552021920611246317114918006288254066305713816409502405227008760 96041200618922553823942883360924865026104917411877067816822264789029014378308478864192589084185254331637646183008074629 155397926921764129586412153075574099601109247922558905818374286709640260695423396870480843150490968148047148588235083389 251439127540686683410355036436498964627214165334435973635196551498669275073731875734673432234676222479684794771243158018 406837054462450812996767189512073064228323413256994879453570838208309535769155272605154275385167190627731943359478241407 658276182003137496407122225948572028855537578591430853088767389706978810842887148339827707619843413107416738130721399425 1065113236465588309403889415460645093083860991848425732542338227915288346612042420944981983005010603735148681490199640832 1723389418468725805811011641409217121939398570439856585631105617622267157454929569284809690624854016842565419620921040257 2788502654934314115214901056869862215023259562288282318173443845537555504066971990229791673629864620577714101111120681089 4511892073403039921025912698279079336962658132728138903804549463159822661521901559514601364254718637420279520732041721346 7300394728337354036240813755148941551985917695016421221977993308697378165588873549744393037884583257997993621843162402435 11812286801740393957266726453428020888948575827744560125782542771857200827110775109258994402139301895418273142575204123781 19112681530077747993507540208576962440934493522760981347760536080554578992699648659003387440023885153416266764418366526216 30924968331818141950774266662004983329883069350505541473543078852411779819810423768262381842163187048834539906993570649997 50037649861895889944281806870581945770817562873266522821303614932966358812510072427265769282187072202250806671411937176213 80962618193714031895056073532586929100700632223772064294846693785378138632320496195528151124350259251085346578405507826210 131000268055609921839337880403168874871518195097038587116150308718344497444830568622793920406537331453336153249817445002423 211962886249323953734393953935755803972218827320810651410997002503722636077151064818322071530887590704421499828222952828633 342963154304933875573731834338924678843737022417849238527147311222067133521981633441115991937424922157757653078040397831056 554926040554257829308125788274680482815955849738659889938144313725789769599132698259438063468312512862179152906263350659689 897889194859191704881857622613605161659692872156509128465291624947856903121114331700554055405737435019936805984303748490745

现在我的问题是,python如何设法存储这么大的数字?

1 个答案:

答案 0 :(得分:1)

以答案的形式......

实际上,因为列表,字符串等基本上可以是任何大小,受可用内存约束的限制,决定将该功能扩展为整数。

采取了两个实施中的第二个,结果为(From the PEP,如其他人所示):

  

现有的短和长int类型仍然存在,但仍然是操作          返回一个long int而不是在a时引发OverflowError          结果不能表示为short int。一种新型,          可以引入整数,它是一种抽象基类型          int和long实现类型都是          子类。这很有用,所以程序可以检查          整数测试只需一次测试:

     

if isinstance(i,integer):...

     

经过一番考虑,第二个实施计划是       选择,因为它更容易实现,是向后       在C API级别兼容,另外可以实现       部分地作为过渡措施。

值得注意的是如何处理整数与how floats are treated, which result in OverflowError much earlier.

之间的区别