/****************************************************************** * Memorial University of Newfoundland * Engineering 4892 Data Structures * * $RCSfile$ $Revision$ * $Date$ * $State$ * * Include file for Assignment 2. * ******************************************************************/ /****************************************************************** * REVISION HISTORY * * $Log$ * ******************************************************************/ #ifndef BIGNAT_DEF #define BIGNAT_DEF #include class BigNat { // A class for representing arbitrarily large natural numbers. // Representation: // D a sequence of digits public: // Types enum Status { Ok, PreFail, NewFail }; // Constructors BigNat(int n = 0); // Default constructor. // Pre: n >= 0 // Post: n = 0 -> D = _ /\ n != 0 -> D = digits of n, least significant // first. BigNat(const BigNat& r); // Copy constructor // Destructor ~BigNat(); // Accessors std::string toString() const; // Post: Result = digits of D in 'traditional' order (i.e., most // significant first.) Status getStatus() const { return err; } // Mutators BigNat& operator =(const BigNat& r); // Assignment operator BigNat& operator += (const BigNat& r); // Post: D' = D + r /\ Result = D' BigNat& operator += (int r); // Pre: r > 0 // Post: D' = D + r /\ Result = D' BigNat& operator *= (int r); // Pre: 0 < r < 10 // Post: D' = D * r /\ Result = D' private: // Representation: // *head is least significant digit, *(head->next) is next least // significant etc. // Empty list means 0. struct Node { int digit; Node* next; }; Node *head; Status err; }; #endif