verylong.h

#ifndef __SHAREWIZ_VERYLONG_H__
#define __SHAREWIZ_VERYLONG_H__
 
//#include <string>
 
// Very Long Integer Class
 
 
class Verylong
{
private:
	// Data Fields
	std::string vlstr;     // The string is stored in reverse order.
	int    vlsign;    // Sign of Verylong: +=>0; -=>1
 
	// Private member functions
	Verylong multdigit(int) const;
	Verylong mult10(int) const;
 
public:
	// Constructors and destructor
	Verylong(const std::string&);
	Verylong(int);
	Verylong(const Verylong &);
	~Verylong();
 
	// Conversion operators
	operator int() const;
	operator double() const;
	operator std::string () const;
 
	// Arithmetic operators and Relational operators
	const Verylong & operator = (const Verylong &);  // assignment operator
	Verylong operator - () const;     // negate  operator
	Verylong operator ++ ();          // prefix  increment operator
	Verylong operator ++ (int);       // postfix increment operator
	Verylong operator -- ();          // prefix  decrement operator
	Verylong operator -- (int);       // postfix decrement operator
 
	Verylong operator += (const Verylong &);
	Verylong operator -= (const Verylong &);
	Verylong operator *= (const Verylong &);
	Verylong operator /= (const Verylong &);
	Verylong operator %= (const Verylong &);
	Verylong operator ^= (const Verylong &);
 
	friend Verylong operator + (const Verylong &, const Verylong &);
	friend Verylong operator - (const Verylong &, const Verylong &);
	friend Verylong operator * (const Verylong &, const Verylong &);
	friend Verylong operator / (const Verylong &, const Verylong &);
	friend Verylong operator % (const Verylong &, const Verylong &);
	friend Verylong operator ^ (const Verylong &, const Verylong &);
 
	friend int operator == (const Verylong &, const Verylong &);
	friend int operator != (const Verylong &, const Verylong &);
	friend int operator <  (const Verylong &, const Verylong &);
	friend int operator <= (const Verylong &, const Verylong &);
	friend int operator >  (const Verylong &, const Verylong &);
	friend int operator >= (const Verylong &, const Verylong &);
 
	// Other functions
	friend Verylong abs(const Verylong &);
	friend Verylong sqrt(const Verylong &);
	friend Verylong pow(const Verylong &, const Verylong &);
	friend double div(const Verylong &, const Verylong &);
 
	// Class Data
	static const Verylong zero;
	static const Verylong one;
	static const Verylong two;
 
	// I/O stream functions
	friend std::ostream & operator << (std::ostream &, const Verylong &);
	friend std::istream & operator >> (std::istream &, Verylong &);
};
 
 
//template <> Verylong zero(Verylong) { return Verylong::zero; }
//template <> Verylong one(Verylong) { return Verylong::one; }
 
 
#endif