CBigInt001
Home ] Up ]

 

//  CBigInt001.cpp
//  04/07/2004
//  Author: AOU


//////////////////////////////////////////////////////////////////////
// include files
//////////////////////////////////////////////////////////////////////
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>


//////////////////////////////////////////////////////////////////////
// constants
//////////////////////////////////////////////////////////////////////
const int MAX_DIGITS = 50;  //artificial limit
const int TEST_COUNT = 20;

/*
const char *TEST_DATA[] =
  {
  "0", "1", "12", "123", "1234", "123450", "1234506", "12345067",
  "123450670", "1234506708", "1234506708", "Hello", "PSU",
  "9", "99", "999", "9999", "99999", "999999", "9999999",
  "10", "200", "3000", "40000", "500000", "6000000", "70000000",
  "800000000", "9000000000", "1090000000000", "11900000000000",
  "129000000000000", "1390000000000000", "14900000000000000"
  };
*/

const char *TEST_DATA[] =
  {
  "0", "1", "12", "123", "1234", "123450", "1234506", "12345067"
  };

const int TEST_DATA_COUNT = sizeof(TEST_DATA)/sizeof(TEST_DATA[0]);


//////////////////////////////////////////////////////////////////////
// class CDigit
//////////////////////////////////////////////////////////////////////
class CDigit
  {
  private:
    CDigit * _prev;
    CDigit * _next;
    char _digit;
  public:
    CDigit(void);
    CDigit(char d);
    friend ostream & operator << (ostream &bob, const CDigit &d);
  };

//////////////////////////////////////////////////////////////////////
// class CBigInt
//////////////////////////////////////////////////////////////////////
class CBigInt
  {
  private:
    CDigit * _first;
    CDigit * _last;
    char _sign;
    unsigned long int _size;
    void initialize(void);
  public:
    CBigInt(void);
    void display(void);
    CBigInt(char d[]);
    CBigInt(char code);
    void displayMinimized(void);
    bool shiftLeft(void);
    friend void add(CBigInt x, CBigInt y, CBigInt &z);

    void displayScientific(void);

    CBigInt(short int x);
    // [SHRT_MIN, SHRT_MAX] = [-32767,32767]

    CBigInt(unsigned short int x); 
    // [0, USHRT_MAX] = [0, 65535]

    CBigInt(long int x);
    // [LONG_MIN, LONG_MAX] = [-2147483647, 2147483647]

    CBigInt(unsigned long int x);
    // [0, ULONG_MAX] = [0, 4294967295]


    void displayWithSeparatorForThousands(void);

    friend ostream & operator << (ostream &bob, const CBigInt &bi);
    CBigInt(const CBigInt &bi);
    friend bool isEqual(const CBigInt &bi1, const CBigInt &bi2);

    bool isEqual(const CBigInt &bi2);
    bool operator ==(const CBigInt &bi2);

    bool operator < (const CBigInt &bi2);

    bool operator <= (const CBigInt &bi2);
    bool operator >  (const CBigInt &bi2);
    bool operator >= (const CBigInt &bi2);
    bool operator != (const CBigInt &bi2);

    bool shiftRight(void);
    bool shiftRight(int d);
    bool shiftLeft(int d);

    CBigInt add(const CBigInt &y);

    CBigInt operator +(const CBigInt &y);
  };

void driver_CDigit_ConstructorDefault(void);

void main(void)
  {
  driver_CDigit_ConstructorDefault();
  }


void driver_CDigit_ConstructorDefault(void)
  {
  CDigit d;
  }

CDigit::CDigit(void)
  {
  _prev = NULL;
  _next = NULL;
  _digit = 0;
  }