BigNum/BigNum.hpp

```
#ifndef BIGNUM\_HPP\_INCLUDED
#define BIGNUM\_HPP\_INCLUDED

#include <iostream>
#include <string>

class bigNum
{
 std::string number;
 bool positive;
 size\_t nsize;
 void updateSize();
 void cleanup(); //usuwa wiodące zera i ustawia positive = true, gdy liczba = 0

 //pomocnicze funkcje arytmetyczne
 static bigNum power10(bigNum lhs, const int& times); //zwraca lhs \* 10^times
 static bigNum timesx(bigNum lhs, const int& times); //zwraca lhs \* times
 static bigNum subtract(bigNum lhs, const bigNum& rhs);
 //odejmuje drugą liczbę od pierwszej, ignoruje znaki

 static bigNum add(const bigNum& lhs, const bigNum& rhs);
 //dodaje drugą liczbę do pierwszej, ignoruje znaki

 static bigNum extract(const bigNum& lhs, const int& digits);
 //"wyciąga" podaną liczbę cyfr z podanego obiektu (zaczynając od lewej)
 //używane w operatorze dzielenia

 static bigNum basic\_division(bigNum& lhs, const bigNum& rhs, const int& digits);
 //dzieli pierwszą liczbę przez drugą, zwracając całkowity wynik
 //dodatkowo modyfikuje oryginalną liczbę poprzez referencję
 //używane w operatorze dzielenia

public:

 //konstruktory
 bigNum();
 bigNum(const char \*value);
 bigNum(const std::string& value);
 bigNum(const long long& value);
 bigNum(const int& value);
 bigNum(const bigNum& value);

 //operator przypisania
 bigNum& operator=(const bigNum& rhs);

 //operatory arytmetyczne
 bigNum operator+=(const bigNum& rhs);
 bigNum operator-=(const bigNum& rhs);
 bigNum operator\*=(const bigNum& rhs);
 bigNum operator/=(const bigNum& rhs);
 bigNum operator%=(const bigNum& rhs);
 bigNum operator^=(const bigNum& rhs);

 friend bigNum operator+(const bigNum& lhs, const bigNum& rhs);
 friend bigNum operator-(const bigNum& lhs, const bigNum& rhs);
 friend bigNum operator\*(const bigNum& lhs, const bigNum& rhs);
 friend bigNum operator/(const bigNum& lhs, const bigNum& rhs);
 friend bigNum operator%(const bigNum& lhs, const bigNum& rhs);
 friend bigNum operator^(const bigNum& lhs, const bigNum& rhs);

 bigNum operator-();

 bigNum operator++();
 bigNum operator++(int);

 bigNum operator--();
 bigNum operator--(int);

 //operatory porównania
 friend bool operator==(const bigNum& lhs, const bigNum& rhs);
 friend bool operator!=(const bigNum& lhs, const bigNum& rhs);
 friend bool operator>(const bigNum& lhs, const bigNum& rhs);
 friend bool operator<=(const bigNum& lhs, const bigNum& rhs);
 friend bool operator<(const bigNum& lhs, const bigNum& rhs);
 friend bool operator>=(const bigNum& lhs, const bigNum& rhs);

 //operatory wejścia/wyjścia
 friend std::ostream& operator<<(std::ostream& os, const bigNum& rhs);
 friend std::istream& operator>>(std::istream& is, bigNum& rhs);

 //operatory rzutowania
 explicit operator long long() const;
 explicit operator int() const;
 explicit operator double() const;
 explicit operator std::string() const;

 //metody do manipulacji poszczególnymi cyframi
 void changeDigit(int digit, int value);
 int getDigit(int digit) const;

 //konwersja typów
 std::string toString() const;
 int toInt() const;
 long long toLongLong() const;
 double toDouble() const;

 //inne
 size\_t getSize() const;
 bool isPositive() const;
 void changeSign();
 bigNum abs() const; //zwraca wartość całkowitą
};

#endif // BIGNUM\_HPP\_INCLUDED

```