# PBinfo #555 – Overflow – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

Cerința
Lui Gigel i s-a cerut să scrie un program care realizează înmulțirea dintre două numere naturale. Pentru a-i da o provocare lui Gigel, profesorul îi dă ca date de intrare un set de perechi de numere naturale pentru care produsul poate depăși 2 64. Gigel trebuie acum să-și modifice programul pentru ca să poată detecta cazurile speciale.

Date de intrare
Programul citește de la tastatură numărul n, iar apoi n perechi de numere naturale, care trebuie înmulțite.

Date de ieșire
Programul va afișa pe ecran rezultatele pentru cele n operații, fiecare pe câte o linie. Rezultatul operației este produsul celor două numere, dacă acesta se poate reprezenta pe 8 octeți fără semn, sau mesajul Overflow!, în caz contrar.

Restricții și precizări

1 ≤ n ≤ 100.000
pentru fiecare pereche, cele două numere se pot reprezenta pe 8 octeți, fără semn
valorile care se pot reprezenta pe 8 octeți fără semn sunt cuprinse între 0 și 18.446.744.073.709.551.615

Exemplu:
Intrare

3
2147483647 2147483647
18446744073709551615 2
666013 1
Ieșire

4611686014132420609
Overflow!
666013

## Cod sursă C++

```cpp
#include <iostream>
#include <string>
using namespace std;
int n;
unsigned long long a, b;
const unsigned long long lim = -1;
int main() {
    cin >> n;
    for (int i = 0; i < n; ++i) {
        cin >> a >> b;
        if ((a && lim / a >= b) || (b && lim / b >= a) || (!a && !b))
            cout << a * b << "\n";
        else
            cout << "Overflow!\n";
    } return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/555)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/555/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-555/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
