Rezolvare completă PbInfo #555 Overflow

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

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Overflow:

//Complexitate O(1) spatiu si O(n) timp
//Ad-hoc

#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 << "
";
        else
            cout << "Overflow!
";
    }
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #555 Overflow

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #555 Overflow de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!