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