480 likes | 709 Views
CSCE 2100: Computing Foundations 1 Intro to Advanced C++. Ian Parberry Summer 2013. Some Advanced C++ Topics. Templates Example: Templated stack Operator overloading Example: Complex numbers Copy constructors Example: Multidimensional vectors More examples CImageFileNameList
E N D
CSCE 2100: Computing Foundations 1Intro to Advanced C++ Ian Parberry Summer 2013
Some Advanced C++ Topics • Templates • Example: Templated stack • Operator overloading • Example: Complex numbers • Copy constructors • Example: Multidimensional vectors • More examples • CImageFileNameList • Arbitrary precision integers
What We Can Do Already: A Stack of ints classStackClass{ private: int *value; //data in stack int count; //number of elements int size; //maximum number of elements allowed public: StackClass(int s); //constructor StackClass(); //destructor void reset(); //clear the stack void push(int v); //push v onto stack int pop(); //delete and return top }; //StackClass
Stack of ints StackClass::StackClass(int s){ value = new int[s]; size = s; count = 0; } //constructor StackClass::~StackClass(){ delete [] value; } //destructor voidStackClass::reset(){ count = 0; } //reset
Stack of ints voidStackClass::push(int v){ if(count < size) value[count++] = v; } //push intStackClass::pop(){ if(count > 0) return(value[--count]); else return 0; } //pop
Multiple Types of Stack • But what if I also want a stack of floats, or a stack of strings? • Do I really want to make three different stack classes? Tedious to build, difficult to maintain. • All we want to do is change the red ints. • Answer: Templates.
Stack of <stackelement>s template <class stackelement>classStackClass{ private: stackelement *value; //data in stack int count; //number of elements int size; //maximum number of elements allowed public: StackClass(int s); //constructor StackClass(); //destructor void reset(); //clear the stack void push(stackelement v); //push v onto stack stackelement pop(); //delete & return top }; //StackClass
Stack of <stackelement>s template<class stackelement> StackClass<stackelement>::StackClass(int s){ value = new stackelement[s]; size = s; count = 0; } //constructor template<class stackelement> StackClass<stackelement>::StackClass::~StackClass(){ delete [] value; } //destructor template<class stackelement> void StackClass<stackelement>::reset(){ count = 0; } //reset
Stack of <stackelement>s template<class stackelement> voidStackClass<stackelement>::push(stackelement v){ if(count<size) value[count++] = v; } //push template<class stackelement> stackelementStackClass<stackelement>::pop(){ if(count>0) return(value[--count]); else return 0; } //pop
Declaration of Templated Stack constintSTACKSIZE = 42; StackClass<double> stack0(STACKSIZE); StackClass<float> stack1(STACKSIZE); StackClass<int> stack2(STACKSIZE); StackClass<char> stack3(STACKSIZE); classlongint{ //my own long integer class … }; StackClass<longint> stack4(STACKSIZE);
Operator Overloading • C++ gives you the power to define operators such as * and + on your own classes. • This is called operator overloading. classcomplex{ //complex number private: double imaginary, real; public: complex(double r=0.0, doublei=0.0); friendcomplexoperator+(complex, complex); friendcomplex& operator+=(complex&, complex); friendostream& operator<<(ostream&,complex x); }; //complex
Complex Numbers complex::complex(double r, doublei){ imaginary = i; real = r; } //constructor complexoperator+(complex first, complex second){ returncomplex(first.real+ second.real, first.imaginary + second.imaginary); } //overloaded +
Complex Numbers complex& operator+=(complex& x, complex y){ x.imaginary += y.imaginary; x.real += y.real; return x; } //overloaded += ostream& operator<<(ostream& output_stream, complex x){ output_stream << "(" << x.real << "," << x.imaginary << ")"; returnoutput_stream; } //overloaded output
Complex Numbers int main(){ complex a(1,2), b(3,4), c; c = a + b; cout << c; //outputs (4,6) c += a; cout << c; //outputs (5,8) return 0; } //main
A Vector Class constintVECSIZE = 4; //vector dimension class vector{ private: int *data; public: vector(); //constructor ~vector(); //destructor vector(vector&); //copy constructor friendostream& operator<<(ostream&, vector); friendistream& operator>>(istream&, vector&); vector operator=(const vector&); vector operator+=(vector); friend vector operator+(vector, vector); }; //vector New New Not just friends any more.
Vector Constructor and Destructor vector::vector(){ //constructor data = new int[VECSIZE]; for(inti=0; i<VECSIZE; i++) data[i] = 0; } //constructor vector::~vector(){ //destructor delete [] data; } //destructor
Copy Constructor for Vectors vector::vector(vector& v){ data = new int[VECSIZE]; for(inti=0; i<VECSIZE; i++) data[i] = v.data[i]; } //copy constructor
Overloaded Assignment for Vectors vector vector::operator=(const vector& v){ if(this != &v) for(inti=0; i<VECSIZE; i++) data[i] = v.data[i]; return *this; } //operator=
Overloaded Addition for Vectors vector operator+(vector x, vector y){ //addition vector result=x; result += y; return result; } // operator+ vector vector::operator+=(vector v){ //overloaded += for(inti=0; i<VECSIZE; i++) data[i] += v.data[i]; return *this; } //operator+=
Overloaded I/O for Vectors ostream& operator<<(ostream& output_stream, vector v){ output_stream<<'('; for(inti=0; i<VECSIZE-1; i++) output_stream << v.data[i] << ','; output_stream << v.data[VECSIZE-1] << ')'; return output_stream; } //overloaded output istream& operator>>(istream& input_stream, vector &v){ for(inti=0; i<VECSIZE; i++) input_stream>>v.data[i]; returninput_stream; } //overloaded input
How to Use Our Vector Class int main(){ vector a, b, c; cout << "> "; cin >> a; //overloaded input cout << "> "; cin >> b; //overloaded input c = a + b; //overloaded operator+ cout << "a+b= " << c << endl; //overloaded output return 0; } //main
CImageFileNameList classCImageFileNameList{ private: char** m_lplpImageFileName; intm_nImageFileCount; public: CImageFileNameList(void); ~CImageFileNameList(void); voidGetImageFileNames(); char* operator[](constint); }; //CImageFileNameList
CImageFileNameList CImageFileNameList::CImageFileNameList(void){ m_lplpImageFileName = NULL; m_nImageFileCount = 0; } //constructor CImageFileNameList::~CImageFileNameList(void){ for(inti=0; i<m_nImageFileCount; i++) delete [] m_lplpImageFileName[i]; delete [] m_lplpImageFileName; } //destructor
CImageFileNameList //safe index into name list char* CImageFileNameList::operator[](constintix){ if(ix >= 0 && ix < m_nImageFileCount) returnm_lplpImageFileName[ix]; else return "NotAValidFileName.bmp"; } //operator[]
Long Integers classlongint{ //long integer class private: unsigned int* data; unsigned intsize; voidloadstring(const char* string); void reallocate(int s); void grow(int s); public: longint(); //constructor longint(unsigned int); //constructor longint(char*); //constructor longint(constlongint&); //copy constructor ~longint(); //destructor Note multiple constructors
Long Integers friendostream& operator<<(ostream&, longint); friendistream& operator>>(istream&, longint&); longint& operator=(constlongint&); longint& operator=(constint); longint& operator=(const char*); longint& operator+=(constlongint&); friendlongintoperator+(longint, longint); }; //longint Note multiple assignment ops
Long Integers //overloaded assignment operators longint& longint::operator=(constlongint& l){ if(this != &l){ //protect against self assignment reallocate(l.size); //grab enough space for(inti=0; i<size; i++) data[i] = l.data[i]; } return *this; } longint& longint::operator=(constinti){ reallocate(1); *data = i; return *this; }
Long Integers longint& longint::operator=(const char* string){ intdigitcount = strlen(string); int s = digitcount/HalfBytesInWord + (digitcount%HalfBytesInWord>0?1:0); reallocate(s); loadstring(string); return *this; }
Using the Long Integer Class The Windows calculator can’t calculate without resorting to scientific notation.
TexCalc, the Texas Sized Calculator Just for fun, I decided to code a calculator that can handle not just long integers, but loooooo-ooooooong integers.
12758857994094198151763893403480541966683204398832742671049843097263646953668006259327894302669719622580966377315480838861344578339557928252631510206214991990777857971500127409510060359960695166866539168326861490640814475620678449126990420046055838599105832965268579411057576265040186491283391487811948233393234464811170832933226980670265479182815136763168490304693663585166425594548231336380355393392776050390581373184458847783832481006928582539515255354311776797946677316746064636248718872315186844644041639709718225584145246078929089171167400843805739959131141650736227344486727566309099544700455270063626827044577269279140428316324737852059623263142708001973500571920723348601668132110906427591396575911235130536330130190508748067821423810661226871543376286781499500535176123612972356263600232849857227651058812162693967331999782794018743402903938329230778402584052851862980867050991721009484096677491014261812444164930797643636602882721683461754416186160057640293002635916976254067632326974741205297516957298450397293309867950219010086104997027090972868552833540401574125499466992139630096844264376380638436711739640644535064276178354425915340657072802381530346088461524327856379624036718271030461966520429931934328632142120469004631233641499909581215299893254945109371237301523853945661874266639250320192404325755563302721207493611749910098784333401089488455837318786544857433244885642059073429544618283601747929260887325236070963314815877172762439526533256707668808603763256053949346317025836898892982896322469562071882991800263582807915371165032579693075968350683837425027388851105182880235149710149529535298656386707265271218577177738601396321928082599589534934235272847204719080580397325843387699648192230112746067814437934938062954100847559655254390861910069666801775308365035417921263999472718067780692287041828739699401377746783998895223678238685766451809415645588435949416065231435123920536949802459727352264044631093620643780581806300752662825468762802889953629482725949186407267611033566903543321231123421225457169578455462778752807872093520898212841058600462589006959177620868436331993960980731344808946271594083675074142106527961233368000128351218988674549553759418498805331116696675332170365395446858627553532111479424986661634038578010493408987973304809794265864120897015625937494902942765792285459756229663972771070455385789324521154089162676814535580439671275927419586523879827528577129924572512010997059375482956505207332368100821444925709868480582125784097462852455586138965676207524937711057559341765519142343118927136672834744027164799224159583624757667426163885494328809235295097225133416896976616068064692179887928287843027698893143511960393496990005329874317361240564267402573467953580470338376080914104270911565987763507742912260475223008852597129195550287607652009808747054423213422260177924648875979217640773776916053093325804837637662468564800649515759148432013238200889633673681759362867322940677431249612453275272477818244386381876118110537750256682621760294846278709285650202054505186889309676358509511322793207175411230330332176860594001273858702968579116393300870284685839135887979752249820433756390492096727872280131788972260429449753755678972225481721271005604794112466064712504703534111400117243182548999980259246478373160370023891738095815391431872235536391556269813624330796417653340916208212308478805042558699622869443706628495196207044231459467981502458375610732266357253014729388755081722141097246255073175670708041366365231851361776950165623839255951898067688445238897340082472437138480276040203856826600551746220817162825382041233749671240879916198082122090587237714576584767449161291204421532464075967770553294331751455336094978822025056012489343175338230086669748420770806340378983390599876333638671609120421861889086894442066983590849447211031315324414798491194274262973059682540648981165380640265929394246274465513113181297216713556256333065092901461588992333514480444205648988370530747742416025469759329123984775138308220117309045635188127621556838935004843471838015726105304199930676099884794330171611151485007500954602238856529616096458001195873372939175310575001337900423037380192839224449446340169717670728606811794989128230194912720932490337133806734929814212570115378314401700101558725760976252202855321349169844964713900459397444121946523307796557282807069655150328659610046751007991603184572775358534305456398448883981949478217512669547674593490688480024388456941359438816867408885476446345311613600514921686057127363874767286871646630151016445345345120978261511501305449241454972945625702850556762158644701265640720118856860767236183485749428887774414034236381979793890385719980016869216406285799129087955306074199799679776326367368106371876035802656377711578899871889316791218039623432823829762781805986317170561265240246739159915164426167654862903241687605799453777060148817725614121462061008994175684231918571676489431620408499278167061723783535141041182380444635305130177388302658472940406740171272374374498917851051990580475877115894114209627500831276817680570786708050256293191789702280891577516465157769090798419041119558960555905208040446898233449291300652991171077041736065242263819167990706772056284230856676677055057344072773292721369486112441723164214998904316968390458300103754988472377177560146623248637946337566987700862263662522171310903901710016985659245986112928698078507451673235201996140494536966101138827725751581767067828264564791888526471950707696522163006396037868694937081062062653108049175196266927805648977943615756636738075434125797798186696033354911257668712424231038557220712454984015115654694263537553601994725815080342786970155498217695331239790189714713139067821432501826344057542579529195474176468755080602190373728354414062829854833225991158420976385720855846493421320139651286951942473212697176147679179670963096574316973381645139610495707909932567518383492013499901432350997553472976308467478688115510844656767567873191346009692947256115128817222203811633211313483713895834842637075297794697775383388794899551347986439659208984682211653496370804190740197537676844971163050401533753689360740040807860724478754539787557263018170955696315046209359751889946390460548621037255926502903594024066184400740470416139977341725980028491180655164940705414866568529646008028055514882363730711657861954706153923123888958949595888431310780588366750936169820318672878276016646026174502419435880332482010148343176304330279515085558418993608155662425502117469153288390707804327892490278889061517570304318320182846546195621173975636678253963952252976394286438909988089452304237098629846237958193921463980239965528338173086460704643326084808854150399914686714351424707092372325006297059524327802714723250460169606434757477562916252848812389638504691262447399787899375167682099815087814225077596683284527358275881427343002737253764352386675324899302991495618517058935941692377570474485105216131360649511044531750372904391697180596597522263407292912320699422381761194170308789901739057949651941251862688823612420779383195678797895502277458341016160764770158955097269747131179182259639220609829759682845300894845854689779702781315589636911563086468817423579242560832719954411098224751467278836385583085794029693150541428135965538318220393789904018092997037259177755279732356632317078956866294736597711098139261789044521803933079183389890090136154873308109030983065380253647393208160177330669615098862885589890765094718295557860698229415027487013514513760497840362552792546394604896878849205524552460571588027042011246742609643609255360569121000720645993868566016304814763684261837438332698802256810566405390993157608081840708169011533995794772792923779018825895944066710222190337557626744539163950596238978672781558160997937823452493852709821335643578033532160718723645411461559180400662415615804071395905354622187410003222283811817015786046605307144904545380954737684453419323891163072736224006747802265023673083320182376119820980708850345229314929622809652705297558042492878619054178064290199170087715456567053094104528015433943209346473283729012147525209514608773415931965786713271754770416899486961367817497100130532751540446606325226280893065040942183500711952861085706587139995493727718657219333022342552480574657416864671123283634371340695396414157825903094646236369568144566740030567614736261404401035098750553026774979876902687066187607558485962910748780925873839544562778835683596033109918255896652059313518799308178324911671440753527714270252776515160299424586281188501142963888434974215060159236225412488771381987973965527893801548710417598602782051667637059366185369047083630337990326528726664601872397636745146882235933838781016476553244447645321770554523665095209455467575473512819736600691204833452490948163495433689926167409117691498192995289051939083387263826547067876387112518931197564220605003173312328449984490245929256280359615756078577956461096067848763050075457534626076971217124791917106656916506304021042679737958443854175200543433449737505427675624024324220233871228261958974609983145699390966199093766124373320222737957513663344467857856498441745217407974207473845899636573783835397708562156965320089780232992868927867098197320251549945981566888996169264788131408841272501394997880827632567778958744539118992642086270980161868510255545899188120608413858657354674344953012747941687859030377346376777825960303221602969998593319395171537186477450640331213465983142429644937085094022891598038785432294581220728145000450175276857468513938758521735251718624293414685364354838230529757487031232643291708752258787751705287009537251283344414439116393975226891792227292238455742179239924848324330175159131236613626618237255828004871811263622107965488656843948401964408259787676302285329314485222264563166764143632450432462739598924781429721781972328905606707362275018324944052838262728510355042369568249038979201501561678940498037530854130453532771033347741464520243838137360961758477659256146537328699933686148187365550434150614573430124287414892685608584910654079848113370345727609527488803682438168751370456384870654361956263916148021949215083448584401917405587020575345256859933060141793495895301602355780733081221815849973975583497941866093265654188463171671787523425136407996802557252319421820842169844130440516170663615485100894994434609990919917951835758606546704111078678729571661495356487679216292650810450233307805328533139366822865512011613495686821139522066204662503393905939663167405236523725075289758392265703973815695972387381598672647338014330638907733444399760656307124436293897117613968152978494541558656758401193823316025721368439706421795103406277525573463942465586859248817872965921907722438837640548555790967845970502385686438191430294303175191404557420142316057061128101905536971708483308984433296227120506851490007855157879656889084103940867504871946234792924365992487096285541263736094590957500421381947329819706460888062479523458603579158524313144535981946764091052198115799883949265253193461861406353967255960048266685428102169137427546694904050002685719411964653285955210054427349309246742256973297928851592300384056537801872512228703533998352523245688033177229253030382332411612175584124701544116865182594910303140540342947493159075870855609859666051682724400165132421596412481346981934416214183347724261179592490944069000377743550808690696338559503434034773650826952276692046595475970532838833120732433522159493757571918343659442168983702683520092116242958450013879989663267493017688084771000313791569347048996061606734846194981456704401030151964631197687134075354520615215654033210720832064570169261186256775125877059740016601894493801143441826752681104328383854980524201447006297116465965815765826184085824310840012591743153508364288311119484266063884398328416756016128646951417464841527191604785636338954927131831757878558144050456280137623872045159174175728041375894297413923163717991281818697016060418318342003720528223229788763730580927106520419652585480929662662356074986696910669258419059812700433450531756710212651253060770027253184930862685723189990381049541010829095478005394562437101350803508758487366034137181544095119580550310594883885307794511320654256855211540635023183029582616829790261039567824627051206354380293478590344060798970365116296234801927950409452932173307881187238080002128688167513375543009109722331859017996215293597001820277030145030540631439757482147957439898328912427316512199871822746169484234830146334453245708076038764733105559262539098279410635416551900594174816100501095615272997080620687589224206480855705625690960783576753815501733525888424621002366592969686104588257208760045435504048550188063368415776854468507258806338089970900556032961934288645756430275296985159004492138281782710768071248642631869319061484042974557142162718238022516314583009203439081436257367397018523674232339847294084957790064796992522918297942417953127459847390703307186138318905371515674970112120255560948506607451645800216443342028549614743553350297621154345874465871954831961874576812048179851887091903157568387444700982549653566803880296256974482516425123775236913457299428788916831892597905004592416029554726928686451940916449683778040900567241823938742538145266986227139578262223181302551519175886782767383665311603581618732444094825547250464724863838173099412445040805196850632593452356979947709808353111879117659884313771374420889882770899341144589836045825519471295987552076478839637615432983088248353830028773964436761217946572296398257610527718362940165634413930597067617146909114590934648645590756512218994473408305136243138066056518596297458089757204024739680387388571872890439973878629686130108949155307861499665665597764116756520264195783725092550323687007565934435413310286405585149625964026178762084087935717020031829620280350797802118129534178845569592774798139066638730362520233681087245599222332554565300178107879927492541063505524894710458338839695984703711176934696259459978480690379474826489772580433596637049032946657857922699365149627530094856406316733021004272186355002592932916073910344602393092925837756727026990250741450307179013337595452381592462946346576290737137718818571193747722175904156843635452780354854425623508623199337265365606642253688600239903020082915244490595824697966551597632835235648279906381165645825876959604617157119695790893849194477214694332599902572982703392065163901955512631943913934623634543025022841504817601035753212268519637069492319599445076733460722830771129415318313601635685927077457980202113048928163215506115289170507099521131555628052482634036745568785638099927096272895864641670032249293072389550608894156077297412814637865497661456447888205713481842674445430500245135214649484457668819225037059573509213094067245943933098439288218954865599566211919656968381812003326490547545759466418262935030816628564425920967632289301576816332727206273719128678165013235992737644639337212758222211242922315673562977307404771899015659498308673790029237478370206594153721286978429283943503730735641594241059010039733139468170340355772153330156565113414667178644075108230232009516016336127597241120512177969865954956977298502029955613049892860630875330154205381116562187592484704815884166610026853695688869201444674538095257474376409792752154194213924854588509881554754521238732167484901755121156590011859847057267078410331481138451702734107298466390922607383747788113492115997053724011684795578519111266560486002117619623138426440378794199031389312075334196008109283910615476382423632120168005197218035785512984668009848282913252595188592352519686774329703978471692828408259385516752228007775091746303937070174659896674750205619450435455894271648045026709252338835037604781125105026935350232261181011370942820351595882881974369448186364940222443950701533710278824238695491940541767890867199403334907763170528626049510053361847193634941101478802454210418062268218898174101644458343559325440196536615206184380673332060687111487970499775054743298795111126810067888312883055502178180335635378447707270440296918795746788725706657824860355272402722786406970401726769662684512158523245821011947420615255578125644533877144060694465685572968338919223339179731717817123982314447650175697861382046264286864755120810088691613566638359073768136206230947264235349341153386376803701965663638985654409164203784171012225335074810220098139658703085094346055725233056806648286814256362342078075825595047336005038433386690761679218573176883055094891559130772168133115385809530010825992376516991210463267646313814179380878303205001853594807149885053282551007346300642377517727210413777557557583837286067261774456581557537495468278283676939836264641206632689007798890116109774857950454542491888946326829982778000957777299094905069873302746550221729742700556171031713815313086343360856776978356616829292871598387898269303833156744602173547057052341874468103817304641447691275027163061175688963524942648726469284229090478119474594143078317809118964631406691760408398935026230721130130358045663517448239143384299948283505403371643307045888169177766212939152836994914151840110612919456773401437747581017440079842653297602241333554718307304320644188606068811659599394614896960483041659898539110167378359429657612587659566946452102617906350528508440493674236947864572423192238761053202152335901832093809793821577933097023967391686571143687459468418390462069616454298057783340631903899423340204111786828960692438071406817869737296411806110851567536610276335110556111479026536910054863647391447704181156055666030408188941004961650957615492937754050383639746757656124282239611670953503942841447980490669303909437843557483347511206664037980406758043198839092389893508081362343255083948654044003854495566664354228973682087991283144969981480960240158460465002010256842509117964453224035864766274945472437974573821306804699464556543956088074106882794116688334423593341889830196714631357637174603825582933934193952862764531242198236877233829590072187687088875718037245670852329424037814187739195871825645801886639462347256421652700889141075520172942478207429608948681351802330751784377048622537924210586811373378577040949165396277845063311913362704941170044596468271632737074995516615030165402774012445323403390700153145193725329244255553582901258625034407790179803966256938024028224091532016514396764596821617801977094189469395980307957837070963704046614458661309904326328421370574313655306387352409026377872542337917465366592717620813842419567016246168998949770737093187645689236039825281752693884900539454861143115325202810931035288142992165177453442422883461243035086638357487982888073504507757551400963423781632025338748737638079789631195375506799317771413889731358238129884733017002017453858078636495152966927956242485317319080346206995324868767996699505494245709073901815071533354715879334724466164193409224839293517635436096511655000795659511121585648611959326664677689223719433859305730885096050456096986172920351687821514639482474778644586242133510116091329040611039273866839945940296928394528147419130988227058179200226857441567740298160700526131996863380675019510596465670378596217980863917739410582588911594697026348303483294574575232544049809170735719709002481811036031856692960709808429208804111987779117352587168002500528439191462508184545262135221140834357248781538354592031253712459223791042035745921497968781587134192465023182560910078702085524432259345373967985007006036190802981588353512464418421942012167315707285479611135877265836509293236335870691111099043466599391898561866332038173482227084622948834694553436245478467328692479323440152163206882677939100711514813998834494537598251442208062577727381834426888139320350640582949195062946022752184992765433413506424842289409539952086596898842427620288447132912175402339467148807313041076457302767322920820555092448171034591554759986944020452478847916849828565139540921803801706529588617186337817924762680570238052927582090083744682755663070729390505589487178597271844929217020418089893752848912622849831097150992032732006204512743070369261730499127385176896476598195780618352772765619662129107041668641627872940583269833911486121461762966838887157458083025327419312888626828722117738902335956085314553731985755137782589015138151068891596135230258434511559883348936425541292304929881968399041663548110803403275557121382207930067309104260519244467293999548736251372379867843882406792036836466970369334935769579756532628443324469741253203788495849316810667479009517800771003444597026462742049115951986759896977937309098967549731290941451133676160793898065060824377301451023221309505261838587831871914717209681435723952675686326730133905485706248458294756609896924322482064397736094734120902209268627560233629744683003968466474337156159168176735456971278372418111989236471409575236087201779487404154851891522298816162930163161759649088601452195447383328529797365957888806161967429248660733863683037175010567453361210743159115130197800830043605134536080727337081652436574592835187919425036076786153377706850321950126155356678632265704183684837136122692265788911456359416480375799577916929847227536110807909077122297763592663360632896045866954276644007305095260075958101687133209707582932071966920414591865622592215391572444541556562634615301684972124852378141462626315029654787522674682911915289612746787489913015586338628784945298572014204076901202557363396776239897479240702682635692844210899334292072580599187774904634035331200042127193921851362102469514792927722990386951885330813216188302346391703057002695229324360208369287844199933677803432810001784264556266704252725285094962373125844234584903196883673114859705694476680251044763740138378527325183356777677933559560826277478930421171659110440231826224709478483764809161183206360469503509096990922804070534202545933723781163271118444330221398830925422877702599461825562140042165762260394820414326003442172978616080827183351738502919583457537221873507407320015687207634974936607807641381074796792185803962981275646020513776229566024295562503042258296586739941480685597116007880501717645312127205917754195139800036811245153794065223188579923327521962533222520301364349929804857100862058301155673208371011564143440694338175418942371827441020183191246861295086748854579926471887166065337758021557673796020459862109474668432697162042668791846094903662616342450953008121670718303285161120530611965522134027992432462239009491703780512559373668249431220600318567193902745293141082899809099438058374410739139433525845170547248491470015142424129990812591453422016170955013795555497914095633507802707826903819466537055936497195406711561202187816233571255710333165191736352786649995195169548140104377944763247952251597597058491458921249750643636270961354931181224409744115623449245607457211490769381664261094611273415323814353142443430675011255270772310577819419463688648182174557969427818709185673377099599287046405676001829500775486603908360869616560721455677543677976649182212290551033156720100228155518906391864691385941545219342650653351537284981606104635926834756802281892146625337354904001493025158928314355088280232314362416614226203070747728319063660082846012818151425137161925239106577172248555591229903657643855378554355761052375608144004276935435294186960409494775876549402021848838805192885593516375883586650103825605106106174173544993429711214438350968256610055504548097717680438881718831733940986837739901115661907225917498873979964796376476823320872041728836330585021691282450042754712073900569896160257418661551025417295131673531666510814193753575268982767134431629058268355004762249085301018133393304608885257642601873068975654378712483799473683350278245522285956625946847381865548248912933586779993225405489638257616311181852091538795133341770622892005426504498735590774969694666400287038791916619103448758339816439227419180236532054957380368420807081871864605611109937571258640511015558710421602472435127603510780687394083492823038795713403225442995456668196040818615631950902103599657978877743442243618141977854963187080712046665506430487770791214039321203853344784034266756253289507068030934830617454569692179879232465923281626567515431241012390041028952702366054038700690918659894135709378883092182939703823312158168998935475127916568833172086031514346913616061117390521428327470670366374300394266098380912177281785798965314659621610845507676770856153094783481186374780477552959316510391198894935087957473174069796705872598322016544734959404317243392407621651981043506251020751933262770408401714716073151169605507903988560434229730783774768533001811860069621389372602313102003398277831205912281652316432672429589917179318217704084514002133150773461798546574516698132738866201661753352441624799098043253654989621014071486499129792815053190706331511510575259031366495046880889724197430001404796258257938190694476263200287104852032993771970022743625459115053492220415370003672266463997311159160493765514699879382476487850756553270562070485657839322803612564436994221909955234846553276696457499005438161654323444339971376476451750667779723313503655592268861014497823254163688155924415465506765972289598427401077787803099394544360535358388499470221385404711170148790230647187283318835116487169468033291602138901453251340870464215841097241825311148474514629535244942936562132194357649901908308806227686710234875948642453748739110426871445229994915110420030776959676061691145338601896544496161537311219082863139248223497681273661309560520733997998355328418884348576589592397596254246100391182416241023747326119202771967319448287902894833569979539512700766502505934510360566464245713121743434234037356208992839585026159419398921132781563335898340527295915236009623695456193751623655283528095332353580959124560354473639105511217595161679248389972797881872156777297382921005730853895384153178424706336989213261124793478550708027330494162307209483478911404551206487824645412537910887828438160261974712538965908411223805143446133487876418439792213577009805508959091245566852507911447668126664580008838615345730573577028195110012643987138141964206943566927854793041839074071263721545858746549293598134040066736752217932466817525290311788118997147704796846910121805288048258384022250517494066755015378892732989121709535709049477588518878104399900264108116200550730354890323285760995666646634953492004831943308581760975488009002569172863957497394852810653818242978909465424373010540679362085355977023579925622047723364625341771135467597305530194686544316037838038591440266636670622802186595131502308720263949809705295137098964641443803835752539080004951242547092561339747291309901302482506158933719456335813002961137644481018747639551445346675685865881583894325954060095464769847296000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001275885799409419815176389340348054196668320439883274267104984309726364695366800625932789430266971962258096637731548083886134457833955792825263151020621499199077785797150012740951006035996069516686653916832686149064081447562067844912699042004605583859910583296526857941105757626504018649128339148781194823339323446481117083293322698067026547918281513676316849030469366358516642559454823133638035539339277605039058137318445884778383248100692858253951525535431177679794667731674606463624871887231518684464404163970971822558414524607892908917116740084380573995913114165073622734448672756630909954470045527006362682704457726927914042831632473785205962326314270800197350057192072334860166813211090642759139657591123513053633013019050874806782142381066122687154337628678149950053517612361297235626360023284985722765105881216269396733199978279401874340290393832923077840258405285186298086705099172100948409667749101426181244416493079764363660288272168346175441618616005764029300263591697625406763232697474120529751695729845039729330986795021901008610499702709097286855283354040157412549946699213963009684426437638063843671173964064453506427617835442591534065707280238153034608846152432785637962403671827103046196652042993193432863214212046900463123364149990958121529989325494510937123730152385394566187426663925032019240432575556330272120749361174991009878433340108948845583731878654485743324488564205907342954461828360174792926088732523607096331481587717276243952653325670766880860376325605394934631702583689889298289632246956207188299180026358280791537116503257969307596835068383742502738885110518288023514971014952953529865638670726527121857717773860139632192808259958953493423527284720471908058039732584338769964819223011274606781443793493806295410084755965525439086191006966680177530836503541792126399947271806778069228704182873969940137774678399889522367823868576645180941564558843594941606523143512392053694980245972735226404463109362064378058180630075266282546876280288995362948272594918640726761103356690354332123112342122545716957845546277875280787209352089821284105860046258900695917762086843633199396098073134480894627159408367507414210652796123336800012835121898867454955375941849880533111669667533217036539544685862755353211147942498666163403857801049340898797330480979426586412089701562593749490294276579228545975622966397277107045538578932452115408916267681453558043967127592741958652387982752857712992457251201099705937548295650520733236810082144492570986848058212578409746285245558613896567620752493771105755934176551914234311892713667283474402716479922415958362475766742616388549432880923529509722513341689697661606806469217988792828784302769889314351196039349699000532987431736124056426740257346795358047033837608091410427091156598776350774291226047522300885259712919555028760765200980874705442321342226017792464887597921764077377691605309332580483763766246856480064951575914843201323820088963367368175936286732294067743124961245327527247781824438638187611811053775025668262176029484627870928565020205450518688930967635850951132279320717541123033033217686059400127385870296857911639330087028468583913588797975224982043375639049209672787228013178897226042944975375567897222548172127100560479411246606471250470353411140011724318254899998025924647837316037002389173809581539143187223553639155626981362433079641765334091620821230847880504255869962286944370662849519620704423145946798150245837561073226635725301472938875508172214109724625507317567070804136636523185136177695016562383925595189806768844523889734008247243713848027604020385682660055174622081716282538204123374967124087991619808212209058723771457658476744916129120442153246407596777055329433175145533609497882202505601248934317533823008666974842077080634037898339059987633363867160912042186188908689444206698359084944721103131532441479849119427426297305968254064898116538064026592939424627446551311318129721671355625633306509290146158899233351448044420564898837053074774241602546975932912398477513830822011730904563518812762155683893500484347183801572610530419993067609988479433017161115148500750095460223885652961609645800119587337293917531057500133790042303738019283922444944634016971767072860681179498912823019491272093249033713380673492981421257011537831440170010155872576097625220285532134916984496471390045939744412194652330779655728280706965515032865961004675100799160318457277535853430545639844888398194947821751266954767459349068848002438845694135943881686740888547644634531161360051492168605712736387476728687164663015101644534534512097826151150130544924145497294562570285055676215864470126564072011885686076723618348574942888777441403423638197979389038571998001686921640628579912908795530607419979967977632636736810637187603580265637771157889987188931679121803962343282382976278180598631717056126524024673915991516442616765486290324168760579945377706014881772561412146206100899417568423191857167648943162040849927816706172378353514104118238044463530513017738830265847294040674017127237437449891785105199058047587711589411420962750083127681768057078670805025629319178970228089157751646515776909079841904111955896055590520804044689823344929130065299117107704173606524226381916799070677205628423085667667705505734407277329272136948611244172316421499890431696839045830010375498847237717756014662324863794633756698770086226366252217131090390171001698565924598611292869807850745167323520199614049453696610113882772575158176706782826456479188852647195070769652216300639603786869493708106206265310804917519626692780564897794361575663673807543412579779818669603335491125766871242423103855722071245498401511565469426353755360199472581508034278697015549821769533123979018971471313906782143250182634405754257952919547417646875508060219037372835441406282985483322599115842097638572085584649342132013965128695194247321269717614767917967096309657431697338164513961049570790993256751838349201349990143235099755347297630846747868811551084465676756787319134600969294725611512881722220381163321131348371389583484263707529779469777538338879489955134798643965920898468221165349637080419074019753767684497116305040153375368936074004080786072447875453978755726301817095569631504620935975188994639046054862103725592650290359402406618440074047041613997734172598002849118065516494070541486656852964600802805551488236373071165786195470615392312388895894959588843131078058836675093616982031867287827601664602617450241943588033248201014834317630433027951508555841899360815566242550211746915328839070780432789249027888906151757030431832018284654619562117397563667825396395225297639428643890998808945230423709862984623795819392146398023996552833817308646070464332608480885415039991468671435142470709237232500629705952432780271472325046016960643475747756291625284881238963850469126244739978789937516768209981508781422507759668328452735827588142734300273725376435238667532489930299149561851705893594169237757047448510521613136064951104453175037290439169718059659752226340729291232069942238176119417030878990173905794965194125186268882361242077938319567879789550227745834101616076477015895509726974713117918225963922060982975968284530089484585468977970278131558963691156308646881742357924256083271995441109822475146727883638558308579402969315054142813596553831822039378990401809299703725917775527973235663231707895686629473659771109813926178904452180393307918338989009013615487330810903098306538025364739320816017733066961509886288558989076509471829555786069822941502748701351451376049784036255279254639460489687884920552455246057158802704201124674260964360925536056912100072064599386856601630481476368426183743833269880225681056640539099315760808184070816901153399579477279292377901882589594406671022219033755762674453916395059623897867278155816099793782345249385270982133564357803353216071872364541146155918040066241561580407139590535462218741000322228381181701578604660530714490454538095473768445341932389116307273622400674780226502367308332018237611982098070885034522931492962280965270529755804249287861905417806429019917008771545656705309410452801543394320934647328372901214752520951460877341593196578671327175477041689948696136781749710013053275154044660632522628089306504094218350071195286108570658713999549372771865721933302234255248057465741686467112328363437134069539641415782590309464623636956814456674003056761473626140440103509875055302677497987690268706618760755848596291074878092587383954456277883568359603310991825589665205931351879930817832491167144075352771427025277651516029942458628118850114296388843497421506015923622541248877138198797396552789380154871041759860278205166763705936618536904708363033799032652872666460187239763674514688223593383878101647655324444764532177055452366509520945546757547351281973660069120483345249094816349543368992616740911769149819299528905193908338726382654706787638711251893119756422060500317331232844998449024592925628035961575607857795646109606784876305007545753462607697121712479191710665691650630402104267973795844385417520054343344973750542767562402432422023387122826195897460998314569939096619909376612437332022273795751366334446785785649844174521740797420747384589963657378383539770856215696532008978023299286892786709819732025154994598156688899616926478813140884127250139499788082763256777895874453911899264208627098016186851025554589918812060841385865735467434495301274794168785903037734637677782596030322160296999859331939517153718647745064033121346598314242964493708509402289159803878543229458122072814500045017527685746851393875852173525171862429341468536435483823052975748703123264329170875225878775170528700953725128334441443911639397522689179222729223845574217923992484832433017515913123661362661823725582800487181126362210796548865684394840196440825978767630228532931448522226456316676414363245043246273959892478142972178197232890560670736227501832494405283826272851035504236956824903897920150156167894049803753085413045353277103334774146452024383813736096175847765925614653732869993368614818736555043415061457343012428741489268560858491065407984811337034572760952748880368243816875137045638487065436195626391614802194921508344858440191740558702057534525685993306014179349589530160235578073308122181584997397558349794186609326565418846317167178752342513640799680255725231942182084216984413044051617066361548510089499443460999091991795183575860654670411107867872957166149535648767921629265081045023330780532853313936682286551201161349568682113952206620466250339390593966316740523652372507528975839226570397381569597238738159867264733801433063890773344439976065630712443629389711761396815297849454155865675840119382331602572136843970642179510340627752557346394246558685924881787296592190772243883764054855579096784597050238568643819143029430317519140455742014231605706112810190553697170848330898443329622712050685149000785515787965688908410394086750487194623479292436599248709628554126373609459095750042138194732981970646088806247952345860357915852431314453598194676409105219811579988394926525319346186140635396725596004826668542810216913742754669490405000268571941196465328595521005442734930924674225697329792885159230038405653780187251222870353399835252324568803317722925303038233241161217558412470154411686518259491030314054034294749315907587085560985966605168272440016513242159641248134698193441621418334772426117959249094406900037774355080869069633855950343403477365082695227669204659547597053283883312073243352215949375757191834365944216898370268352009211624295845001387998966326749301768808477100031379156934704899606160673484619498145670440103015196463119768713407535452061521565403321072083206457016926118625677512587705974001660189449380114344182675268110432838385498052420144700629711646596581576582618408582431084001259174315350836428831111948426606388439832841675601612864695141746484152719160478563633895492713183175787855814405045628013762387204515917417572804137589429741392316371799128181869701606041831834200372052822322978876373058092710652041965258548092966266235607498669691066925841905981270043345053175671021265125306077002725318493086268572318999038104954101082909547800539456243710135080350875848736603413718154409511958055031059488388530779451132065425685521154063502318302958261682979026103956782462705120635438029347859034406079897036511629623480192795040945293217330788118723808000212868816751337554300910972233185901799621529359700182027703014503054063143975748214795743989832891242731651219987182274616948423483014633445324570807603876473310555926253909827941063541655190059417481610050109561527299708062068758922420648085570562569096078357675381550173352588842462100236659296968610458825720876004543550404855018806336841577685446850725880633808997090055603296193428864575643027529698515900449213828178271076807124864263186931906148404297455714216271823802251631458300920343908143625736739701852367423233984729408495779006479699252291829794241795312745984739070330718613831890537151567497011212025556094850660745164580021644334202854961474355335029762115434587446587195483196187457681204817985188709190315756838744470098254965356680388029625697448251642512377523691345729942878891683189259790500459241602955472692868645194091644968377804090056724182393874253814526698622713957826222318130255151917588678276738366531160358161873244409482554725046472486383817309941244504080519685063259345235697994770980835311187911765988431377137442088988277089934114458983604582551947129598755207647883963761543298308824835383002877396443676121794657229639825761052771836294016563441393059706761714690911459093464864559075651221899447340830513624313806605651859629745808975720402473968038738857187289043997387862968613010894915530786149966566559776411675652026419578372509255032368700756593443541331028640558514962596402617876208408793571702003182962028035079780211812953417884556959277479813906663873036252023368108724559922233255456530017810787992749254106350552489471045833883969598470371117693469625945997848069037947482648977258043359663704903294665785792269936514962753009485640631673302100427218635500259293291607391034460239309292583775672702699025074145030717901333759545238159246294634657629073713771881857119374772217590415684363545278035485442562350862319933726536560664225368860023990302008291524449059582469796655159763283523564827990638116564582587695960461715711969579089384919447721469433259990257298270339206516390195551263194391393462363454302502284150481760103575321226851963706949231959944507673346072283077112941531831360163568592707745798020211304892816321550611528917050709952113155562805248263403674556878563809992709627289586464167003224929307238955060889415607729741281463786549766145644788820571348184267444543050024513521464948445766881922503705957350921309406724594393309843928821895486559956621191965696838181200332649054754575946641826293503081662856442592096763228930157681633272720627371912867816501323599273764463933721275822221124292231567356297730740477189901565949830867379002923747837020659415372128697842928394350373073564159424105901003973313946817034035577215333015656511341466717864407510823023200951601633612759724112051217796986595495697729850202995561304989286063087533015420538111656218759248470481588416661002685369568886920144467453809525747437640979275215419421392485458850988155475452123873216748490175512115659001185984705726707841033148113845170273410729846639092260738374778811349211599705372401168479557851911126656048600211761962313842644037879419903138931207533419600810928391061547638242363212016800519721803578551298466800984828291325259518859235251968677432970397847169282840825938551675222800777509174630393707017465989667475020561945043545589427164804502670925233883503760478112510502693535023226118101137094282035159588288197436944818636494022244395070153371027882423869549194054176789086719940333490776317052862604951005336184719363494110147880245421041806226821889817410164445834355932544019653661520618438067333206068711148797049977505474329879511112681006788831288305550217818033563537844770727044029691879574678872570665782486035527240272278640697040172676966268451215852324582101194742061525557812564453387714406069446568557296833891922333917973171781712398231444765017569786138204626428686475512081008869161356663835907376813620623094726423534934115338637680370196566363898565440916420378417101222533507481022009813965870308509434605572523305680664828681425636234207807582559504733600503843338669076167921857317688305509489155913077216813311538580953001082599237651699121046326764631381417938087830320500185359480714988505328255100734630064237751772721041377755755758383728606726177445658155753749546827828367693983626464120663268900779889011610977485795045454249188894632682998277800095777729909490506987330274655022172974270055617103171381531308634336085677697835661682929287159838789826930383315674460217354705705234187446810381730464144769127502716306117568896352494264872646928422909047811947459414307831780911896463140669176040839893502623072113013035804566351744823914338429994828350540337164330704588816917776621293915283699491415184011061291945677340143774758101744007984265329760224133355471830730432064418860606881165959939461489696048304165989853911016737835942965761258765956694645210261790635052850844049367423694786457242319223876105320215233590183209380979382157793309702396739168657114368745946841839046206961645429805778334063190389942334020411178682896069243807140681786973729641180611085156753661027633511055611147902653691005486364739144770418115605566603040818894100496165095761549293775405038363974675765612428223961167095350394284144798049066930390943784355748334751120666403798040675804319883909238989350808136234325508394865404400385449556666435422897368208799128314496998148096024015846046500201025684250911796445322403586476627494547243797457382130680469946455654395608807410688279411668833442359334188983019671463135763717460382558293393419395286276453124219823687723382959007218768708887571803724567085232942403781418773919587182564580188663946234725642165270088914107552017294247820742960894868135180233075178437704862253792421058681137337857704094916539627784506331191336270494117004459646827163273707499551661503016540277401244532340339070015314519372532924425555358290125862503440779017980396625693802402822409153201651439676459682161780197709418946939598030795783707096370404661445866130990432632842137057431365530638735240902637787254233791746536659271762081384241956701624616899894977073709318764568923603982528175269388490053945486114311532520281093103528814299216517745344242288346124303508663835748798288807350450775755140096342378163202533874873763807978963119537550679931777141388973135823812988473301700201745385807863649515296692795624248531731908034620699532486876799669950549424570907390181507153335471587933472446616419340922483929351763543609651165500079565951112158564861195932666467768922371943385930573088509605045609698617292035168782151463948247477864458624213351011609132904061103927386683994594029692839452814741913098822705817920022685744156774029816070052613199686338067501951059646567037859621798086391773941058258891159469702634830348329457457523254404980917073571970900248181103603185669296070980842920880411198777911735258716800250052843919146250818454526213522114083435724878153835459203125371245922379104203574592149796878158713419246502318256091007870208552443225934537396798500700603619080298158835351246441842194201216731570728547961113587726583650929323633587069111109904346659939189856186633203817348222708462294883469455343624547846732869247932344015216320688267793910071151481399883449453759825144220806257772738183442688813932035064058294919506294602275218499276543341350642484228940953995208659689884242762028844713291217540233946714880731304107645730276732292082055509244817103459155475998694402045247884791684982856513954092180380170652958861718633781792476268057023805292758209008374468275566307072939050558948717859727184492921702041808989375284891262284983109715099203273200620451274307036926173049912738517689647659819578061835277276561966212910704166864162787294058326983391148612146176296683888715745808302532741931288862682872211773890233595608531455373198575513778258901513815106889159613523025843451155988334893642554129230492988196839904166354811080340327555712138220793006730910426051924446729399954873625137237986784388240679203683646697036933493576957975653262844332446974125320378849584931681066747900951780077100344459702646274204911595198675989697793730909896754973129094145113367616079389806506082437730145102322130950526183858783187191471720968143572395267568632673013390548570624845829475660989692432248206439773609473412090220926862756023362974468300396846647433715615916817673545697127837241811198923647140957523608720177948740415485189152229881616293016316175964908860145219544738332852979736595788880616196742924866073386368303717501056745336121074315911513019780083004360513453608072733708165243657459283518791942503607678615337770685032195012615535667863226570418368483713612269226578891145635941648037579957791692984722753611080790907712229776359266336063289604586695427664400730509526007595810168713320970758293207196692041459186562259221539157244454155656263461530168497212485237814146262631502965478752267468291191528961274678748991301558633862878494529857201420407690120255736339677623989747924070268263569284421089933429207258059918777490463403533120004212719392185136210246951479292772299038695188533081321618830234639170305700269522932436020836928784419993367780343281000178426455626670425272528509496237312584423458490319688367311485970569447668025104476374013837852732518335677767793355956082627747893042117165911044023182622470947848376480916118320636046950350909699092280407053420254593372378116327111844433022139883092542287770259946182556214004216576226039482041432600344217297861608082718335173850291958345753722187350740732001568720763497493660780764138107479679218580396298127564602051377622956602429556250304225829658673994148068559711600788050171764531212720591775419513980003681124515379406522318857992332752196253322252030136434992980485710086205830115567320837101156414344069433817541894237182744102018319124686129508674885457992647188716606533775802155767379602045986210947466843269716204266879184609490366261634245095300812167071830328516112053061196552213402799243246223900949170378051255937366824943122060031856719390274529314108289980909943805837441073913943352584517054724849147001514242412999081259145342201617095501379555549791409563350780270782690381946653705593649719540671156120218781623357125571033316519173635278664999519516954814010437794476324795225159759705849145892124975064363627096135493118122440974411562344924560745721149076938166426109461127341532381435314244343067501125527077231057781941946368864818217455796942781870918567337709959928704640567600182950077548660390836086961656072145567754367797664918221229055103315672010022815551890639186469138594154521934265065335153728498160610463592683475680228189214662533735490400149302515892831435508828023231436241661422620307074772831906366008284601281815142513716192523910657717224855559122990365764385537855435576105237560814400427693543529418696040949477587654940202184883880519288559351637588358665010382560510610617417354499342971121443835096825661005550454809771768043888171883173394098683773990111566190722591749887397996479637647682332087204172883633058502169128245004275471207390056989616025741866155102541729513167353166651081419375357526898276713443162905826835500476224908530101813339330460888525764260187306897565437871248379947368335027824552228595662594684738186554824891293358677999322540548963825761631118185209153879513334177062289200542650449873559077496969466640028703879191661910344875833981643922741918023653205495738036842080708187186460561110993757125864051101555871042160247243512760351078068739408349282303879571340322544299545666819604081861563195090210359965797887774344224361814197785496318708071204666550643048777079121403932120385334478403426675625328950706803093483061745456969217987923246592328162656751543124101239004102895270236605403870069091865989413570937888309218293970382331215816899893547512791656883317208603151434691361606111739052142832747067036637430039426609838091217728178579896531465962161084550767677085615309478348118637478047755295931651039119889493508795747317406979670587259832201654473495940431724339240762165198104350625102075193326277040840171471607315116960550790398856043422973078377476853300181186006962138937260231310200339827783120591228165231643267242958991717931821770408451400213315077346179854657451669813273886620166175335244162479909804325365498962101407148649912979281505319070633151151057525903136649504688088972419743000140479625825793819069447626320028710485203299377197002274362545911505349222041537000367226646399731115916049376551469987938247648785075655327056207048565783932280361256443699422190995523484655327669645749900543816165432344433997137647645175066777972331350365559226886101449782325416368815592441546550676597228959842740107778780309939454436053535838849947022138540471117014879023064718728331883511648716946803329160213890145325134087046421584109724182531114847451462953524494293656213219435764990190830880622768671023487594864245374873911042687144522999491511042003077695967606169114533860189654449616153731121908286313924822349768127366130956052073399799835532841888434857658959239759625424610039118241624102374732611920277196731944828790289483356997953951270076650250593451036056646424571312174343423403735620899283958502615941939892113278156333589834052729591523600962369545619375162365528352809533235358095912456035447363910551121759516167924838997279788187215677729738292100573085389538415317842470633698921326112479347855070802733049416230720948347891140455120648782464541253791088782843816026197471253896590841122380514344613348787641843979221357700980550895909124556685250791144766812666458000883861534573057357702819511001264398713814196420694356692785479304183907407126372154585874654929359813404006673675221793246681752529031178811899714770479684691012180528804825838402225051749406675501537889273298912170953570904947758851887810439990026410811620055073035489032328576099566664663495349200483194330858176097548800900256917286395749739485281065381824297890946542437301054067936208535597702357992562204772336462534177113546759730553019468654431603783803859144026663667062280218659513150230872026394980970529513709896464144380383575253908000495124254709256133974729130990130248250615893371945633581300296113764448101874763955144534667568586588158389432595406009546476984729600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Programming with Overloaded Operators longintg_lngResult, g_lngOperand; switch(g_eOperator){ case ADD_OP: g_lngResult += g_lngOperand; break; caseMULTIPLY_OP: g_lngResult *= g_lngOperand; break; How many overloaded operators are used here?
Programming with Overloaded Operators case SUBTRACT_OP: g_lngResult = g_lngOperand - g_lngResult; break; case DIVIDE_OP: g_lngResult = g_lngOperand / g_lngResult; break; caseMOD_OP: g_lngResult = g_lngOperand % g_lngResult; break; caseEXP_OP: g_lngResult = g_lngOperand ^ g_lngResult; break; How many overloaded operators are used here?
Programming with Overloaded Operators How many overloaded operators are used here? longint temp, result; caseFACTORIAL_OP: result = 1; temp = g_lngResult; while(temp > 1){ result *= temp; temp -= 1; } g_lngResult = result; break;