Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Bitnami MediaWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
3050 - ncif
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
==Cerința== Fie n un numar natural. Pentru n seturi de doua numere naturale a si b, sa se afiseze cate cifre are a<sup>b</sup>. ==Date de intrare== Fișierul de intrare ncif.in conține pe prima linie numărul n, iar pe urmatoarele n linii cate doua numere naturale a si b separate prin spații. ==Date de ieșire== Fișierul de ieșire ncif.out va conține un mesaj de validare a datelor ("Date de intrare valide"), și pe fiecare linie următoare un număr reprezentând câte cifre are a<sup>b</sup>. În cazul în care a sau b depășesc limitele date, se va afișa "a și b trebuie să fie între 0 și 100000". Consola va rămâne goală, întrucât mesajul de validare apare în fișier. ==Restricții și precizări== * 1 ⩽ n ⩽ 10.000 * 0 ⩽ a, b ⩽ 100.000 ==Exemplu== ; ncif.in : 4 : 1 1 : 2 10 : 3 9 : 100 100 ; ncif.out : Date de intrare valide : 1 : 4 : 5 : 201 ==Rezolvare== <syntaxhighlight lang="python"> from math import log10 def calculeaza_numar_cifre(a: int, b: int) -> int: if not (0 <= a <= 100000 and 0 <= b <= 100000): raise ValueError("a și b trebuie să fie între 0 și 100000") return int(b * log10(a)) + 1 def proceseaza_intrari(n: int, intrari: list) -> list: rezultate = [] for i in range(n): a, b = intrari[i] rezultate.append(calculeaza_numar_cifre(a, b)) return rezultate def scrie_fisier_iesire(nume_fisier: str, rezultate: list, valid: bool): with open(nume_fisier, "w") as f: if valid: print("Date de intrare valide", file=f) for r in rezultate: print(r, file=f) if __name__ == "__main__": with open("ncif.in") as f: n = int(next(f)) intrari = [list(map(int, next(f).split())) for _ in range(n)] rezultate = proceseaza_intrari(n, intrari) scrie_fisier_iesire("ncif.out", rezultate, True) </syntaxhighlight> ==Explicatie== Acest program primește un fișier de intrare "ncif.in", care conține un număr n și n perechi de numere întregi a și b. Programul calculează numărul de cifre din b la puterea a și stochează rezultatele într-un fișier de ieșire "ncif.out". Funcția "calculeaza_numar_cifre" primește două numere întregi a și b și calculează numărul de cifre din b la puterea a, utilizând formula logaritmică. Funcția "proceseaza_intrari" primește numărul de intrări și lista de perechi de numere întregi a și b, apoi apelază funcția "calculeaza_numar_cifre" pentru fiecare pereche de numere și stochează rezultatele într-o listă "rezultate". Funcția "scrie_fisier_iesire" primește numele fișierului de ieșire și listă de rezultate și scrie fiecare rezultat în fișierul de ieșire. În final, în blocul "main", programul citește datele de intrare din fișierul "ncif.in", procesează intrările și scrie rezultatele în fișierul "ncif.out".
Summary:
Please note that all contributions to Bitnami MediaWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Bitnami MediaWiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width