// Sample program demonstrating the use of the Big Integer Library.// Standard libraries#include<string>#include<iostream>// `BigIntegerLibrary.hh' includes all of the library headers.#include"BigIntegerLibrary.hh"intmain(){/* The library throws `const char *' error messages when things go * wrong. It's a good idea to catch them using a `try' block like this * one. Your C++ compiler might need a command-line option to compile * code that uses exceptions. */try{BigIntegera;// a is 0intb=535;/* Any primitive integer can be converted implicitly to a * BigInteger. */a=b;/* The reverse conversion requires a method call (implicit * conversions were previously supported but caused trouble). * If a were too big for an int, the library would throw an * exception. */b=a.toInt();BigIntegerc(a);// Copy a BigInteger.// The int literal is converted to a BigInteger.BigIntegerd(-314159265);/* This won't compile (at least on 32-bit machines) because the * number is too big to be a primitive integer literal, and * there's no such thing as a BigInteger literal. *///BigInteger e(3141592653589793238462643383279);// Instead you can convert the number from a string.std::strings("3141592653589793238462643383279");BigIntegerf=stringToBigInteger(s);// You can convert the other way too.std::strings2=bigIntegerToString(f);// f is implicitly stringified and sent to std::cout.std::cout<<f<<std::endl;/* Let's do some math! The library overloads most of the * mathematical operators (including assignment operators) to * work on BigIntegers. There are also ``copy-less'' * operations; see `BigUnsigned.hh' for details. */// Arithmetic operatorsBigIntegerg(314159),h(265);std::cout<<(g+h)<<'\n'<<(g-h)<<'\n'<<(g*h)<<'\n'<<(g/h)<<'\n'<<(g%h)<<std::endl;// Bitwise operatorsBigUnsignedi(0xFF0000FF),j(0x0000FFFF);// The library's << operator recognizes base flags.std::cout.flags(std::ios::hex|std::ios::showbase);std::cout<<(i&j)<<'\n'<<(i|j)<<'\n'<<(i^j)<<'\n'// Shift distances are ordinary unsigned ints.<<(j<<21)<<'\n'<<(j>>10)<<'\n';std::cout.flags(std::ios::dec);// Let's do some heavy lifting and calculate powers of 314.intmaxPower=10;BigUnsignedx(1),big314(314);for(intpower=0;power<=maxPower;power++){std::cout<<"314^"<<power<<" = "<<x<<std::endl;x*=big314;// A BigInteger assignment operator}// Some big-integer algorithms (albeit on small integers).std::cout<<gcd(BigUnsigned(60),72)<<'\n'<<modinv(BigUnsigned(7),11)<<'\n'<<modexp(BigUnsigned(314),159,2653)<<std::endl;// Add your own code here to experiment with the library.}catch(charconst*err){std::cout<<"The library threw an exception:\n"<<err<<std::endl;}return0;}/*The original sample program produces this output:31415926535897932384626433832793144243138948325213511851340xFF0xFF00FFFF0xFF00FF000x1FFFE000000x3F314^0 = 1314^1 = 314314^2 = 98596314^3 = 30959144314^4 = 9721171216314^5 = 3052447761824314^6 = 958468597212736314^7 = 300959139524799104314^8 = 94501169810786918656314^9 = 29673367320587092457984314^10 = 93174373386643470318069761281931*/