0555 - Overflow: Difference between revisions
Paul Ungur (talk | contribs) Pagină nouă: ==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 <span style=“color: red”> 2 64</span>. 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 <span style=... |
Paul Ungur (talk | contribs) No edit summary |
||
Line 27: | Line 27: | ||
==Rezolvare== | ==Rezolvare== | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def | def validare(n): | ||
if not (1 <= n <= 100_000): | |||
return False | |||
return True | |||
if not | |||
def | def overflow(nr1, nr2): | ||
return nr2 and nr1 > 18446744073709551615 // nr2 | |||
return | |||
def | def produs(nr1, nr2): | ||
return nr1 * nr2 | |||
def | def verificare(n): | ||
nr = [] | |||
for | for i in range(n): | ||
print( | nr1, nr2 = map(int, input().split()) | ||
nr.append((nr1, nr2)) | |||
for i in range(n): | |||
if overflow(nr[i][0], nr[i][1]): | |||
print("Overflow!") | |||
else: | |||
print(produs(nr[i][0], nr[i][1])) | |||
if __name__ == " | if __name__ == '__main__': | ||
n = int(input()) | |||
if validare(n): | |||
print("Date de intrare valide") | |||
verificare(n) | |||
else: | |||
print("Date de intrare invalide") | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Revision as of 16:21, 26 April 2023
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
Rezolvare
<syntaxhighlight lang="python" line> def validare(n):
if not (1 <= n <= 100_000): return False return True
def overflow(nr1, nr2):
return nr2 and nr1 > 18446744073709551615 // nr2
def produs(nr1, nr2):
return nr1 * nr2
def verificare(n):
nr = [] for i in range(n): nr1, nr2 = map(int, input().split()) nr.append((nr1, nr2)) for i in range(n): if overflow(nr[i][0], nr[i][1]): print("Overflow!") else: print(produs(nr[i][0], nr[i][1]))
if __name__ == '__main__':
n = int(input()) if validare(n): print("Date de intrare valide") verificare(n) else: print("Date de intrare invalide")
</syntaxhighlight>