Motivație: Având în vedere apariția limbajelor de programare moderne precum Python ce oferă programatorului posibilitatea de a memora și efectua operații aritmetice asupra numerelor întregi mari fără niciun efort suplimentar, necesitatea folosirii acestora în concursurile de informatică a dispărut. Totuși, multe astfel de probleme apar în continuare pe site-urile de informatică românești precum pbinfo, de aceea am considerat că implementarea unei astfel de structuri de date este utilă și în C++.
Cerința
Definiți în C++ clasa big_int cu următoarea structură:
class big_int
{
private:
int sign; // -1 daca numarul este negativ, +1 daca este pozitiv
string digits; // cifrele numarului, stocate in ordine inversa
public:
big_int()
{
// initializare implicita cu 0
}
big_int(string s)
{
// initializare prin intermediul unui sir de caractere
}
big_int(int n)
{
// initializare prin intermediul unui numar intre -2^31 si 2^31 - 1
}
operator string() const
{
// conversie la sir de caractere
}
friend bool operator == (const big_int& a, const big_int& b)
{
// comparator ==
}
friend bool operator < (const big_int& a, const big_int& b)
{
// comparator <
}
big_int abs() const
{
// valoarea absoluta
}
big_int operator - () const
{
// opusul (inversul in raport cu adunarea)
}
big_int operator + (const big_int& b) const
{
// suma a 2 numere
}
big_int operator - (const big_int& b) const
{
// diferenta a 2 numere
}
big_int operator * (const big_int& b) const
{
// produsul a 2 numere
}
big_int operator / (const big_int& b) const
{
// catul impartirii a 2 numere
}
big_int operator % (const big_int& b) const
{
// restul impartirii a 2 numere pozitive
}
friend istream& operator >> (istream& in, big_int& n)
{
// citire prin intermediul stream-urilor
}
friend ostream& operator << (ostream& out, const big_int& n)
{
// scriere prin intermediul stream-urilor
}
};
Această clasă va fi integrată în următorul program:
#include <bits/stdc++.h>
using namespace std;
// codul scris de tine
int main()
{
big_int a = 96, b("420");
cin >> a >> b;
cout << a + b << "\n";
cout << -a + b << "\n";
cout << a - b << "\n";
cout << a * b << "\n";
cout << a / b << "\n";
cout << a.abs() % b.abs() << "\n";
if(a < b)
cout << "a < b\n";
else if(a == b)
cout << "a = b\n";
else cout << "a > b\n";
return 0;
}
Restricții și precizări
- nu se vor face împărțiri la
0 - operatorul
/funcționează la fel ca omologul standard dinC++, adică e.x.-3 / 2 = -1
Exemplu:
Intrare
71 8
Ieșire
79 -63 63 568 8 7 a > b