Supercalculator. A calculator that can handle numbers with thousands of digits, with perfect accuracy. Implement a class that will represent very big integers. It should include a variable size array of ints, which will represent the digits of the number, one by one, and a variable to indicate whether the number is positive or negative. Make an interactive calculator out of it. The calculator part doesn't have to be very sophisticated or pretty. Your class should include the following methods: * at least once constructor, having no parameters and setting the number to zero. * void print() // producing nice human-friendly output * void set(int) * void set(string) * void set(bignum) * void add(int) * void add(bignum) * void subtract(int) * void subtract(bignum) * void multiply(int) * void divide(int) In the future, you will also have to add: * void multiply(bignum) * void divide(bignum) * int compare(bignum) // return -1 for less, 0 for equal, 1 for greater * void factorial(int) Here is a sample test program, with its output void main() { bignum a, b, c, d, e; a.set(12345678); b.set("100000000000000100000000000001"); a.multiply(b); a.print(); // prints 1234567800000001234567800000012345678 c.set(20000000000000000000000002"); c.multiply(b); c.print(); // prints 2000000000000002000000000200020000000000200000000000002 b.add(1); b.print(); // prints 100000000000000100000000000002 d.set(100001); d.multiply(d); d.print(); // prints 10000200001 d.multiply(d); d.print(); // prints 100004000060000400001 d.multiply(d); d.print(); // prints 10000800028000560007000056000280000800001 d.multiply(d); d.print(); // prints 100016001200056001820043680800811440128701144008008043680182000560001200001600001 e.subtract(d); e.print(); // prints -100016001200056001820043680800811440128701144008008043680182000560001200001600001 } A run of your calculator might look like this, but the details are up to you. > 12345678 > 987654321 > * 12193262222374638 > 1010101010101010101010101010101 > 13579 > * 13716161616161616161616161616161479 > + 13716161616161616173809423838536117 > clear > 100000000001 > 100000000001 > 100000000001 > 100000000001 > * 10000000000200000000001 > * 1000000000030000000000300000000001 > * 100000000004000000000060000000000400000000001 > 500 > factorial 12201368259911100687012387854230469262535743428031 92842192413588385845373153881997605496447502203281 86301361647714820358416337872207817720048078520515 93292854779075719393306037729608590862704291745478 82424912726344305670173270769461062802310452644218 87878946575477714986349436778103764427403382736539 74713864778784954384895955375379904232410612713269 84327745715546309977202781014561081188373709531016 35632443298702956389662891165897476957208792692887 12817800702651745077684107196243903943225364226052 34945850129918571501248706961568141625359056693423 81300885624924689156412677565448188650659384795177 53608940057452389403357984763639449053130623237490 66445048824665075946735862074637925184200459369692 98102226397195259719094521782333175693458150855233 28207628200234026269078983424517120062077146409794 56116127629145951237229913340169552363850942885592 01872743379517301458635757082835578015873543276888 86801203998823847021514676054454076635359841744304 80128938313896881639487469658817504506926365338175 05547812864000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000 > end