zadanie nr 6 termin realizacji: 11 kwiecień 2005

C++

arytmetyka długich liczb (operator przypisania, destruktor) studia dzienne

Zdefiniuj klasę LiczbaCalk reprezentującą liczbę całkowitą o nieograniczonym zakresie. Liczby te powinny być kodowane binarnie w systemie uzupełnienia dwójkowego (U2). Do pamiętania długich liczb całkowitych wykorzystaj klasę TabBit z poprzedniego zadania.

class LiczbaCalk
{
protected:
    TabBit *bity;
public:
    LiczbaCalk ();
    LiczbaCalk (int n);
    LiczbaCalk (const LiczbaCalk &lc);
    ~LiczbaCalk ();
    LiczbaCalk & operator= (const LiczbaCalk &lc);
// ...
};

Klasa LiczbaCalk powinna być wyposażona w konstruktor domyślny (wartość domyślna nowoutworzonej liczby ma wynosić 0), konstruktor inicjalizowany wartością typu int, konstruktor kopiujący, destruktor i operator przypisania kopiującego. W klasie LiczbaCalk zdefiniuj operatory umożliwiające wykonywanie obliczeń arytmetycznych (dodawanie, odejmowanie, mnożenie, dzielenie, modulo). Trzeba przy tym pamiętać, że klasa reprezentyjąca długą liczbę może być dość duża i nie powinno się (o ile to możliwe) przekazywać jej przez wartość za pomocą stosu. Można więc zdefiniować po dwie wersje każdego operatora arytmetycznego: jeden jako funkcja zaprzyjaźniona a drugi jako składowy operator przypisania.

class LiczbaCalk
{
// ...
public:
    friend istream operator>> (istream &we, LiczbaCalk &lc) ;
    friend ostream operator<< (ostream &wy, const LiczbaCalk &lc) ;
public:
    friend LiczbaCalk operator+ (const LiczbaCalk &lcl, const LiczbaCalk &clp) ;
    LiczbaCalk & operator+= (const LiczbaCalk &prawy) ;
// ...
};

Do obliczeń arytmetycznych mogą ci się przydać operatory bitowe wraz z przesunięciami. Zaprogramuj także zaprzyjaźnione operatory do czytania ze stumienia wejściowego operator» i pisania do strumienia wyjściowego operator« długich liczb całkowitych w postaci dziesiętnej.

Całą definicję klasy LiczbaCalk podziel na część nagłówkową i źródłową. Następnie w osobnym pliku umieść program, który obliczy i wypisze na standardowym wyjściu 100!, wykorzystując do tego celu długie liczby całkowite.

Uniwersytet Wrocławski Paweł Rzechonek Instytut Informatyki ul. Przesmyckiego 20 PL-51-151 Wrocław