0306 - Zerouri: Difference between revisions

From Bitnami MediaWiki
mNo edit summary
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
== Cerinţa ==
== Cerinţa ==
Se dau n numere naturale nenule. Calculaţi numărul de zerouri de la sfârşitul scrierii zecimale a produsului celor n numere.
Se dau '''n''' numere naturale nenule. Calculaţi numărul de zerouri de la sfârşitul scrierii zecimale a produsului celor '''n''' numere.
== Date de intrare ==
== Date de intrare ==
Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spaţii.
Programul citește de la tastatură numărul '''n''', iar apoi '''n''' numere naturale, separate prin spaţii.
== Date de ieşire ==
== Date de ieşire ==
Programul afișează pe ecran numărul '''total_zerouri''', reprezentând valoarea calculată.
Dacă datele sunt introduse corect,pe ecran se va afișa :'''"Datele sunt introduse corect."''',apoi pe un rând nou numărul '''NRZ''', reprezentând valoarea calculată.În cazul contrar,se va afișa pe ecran '''"Datele nu corespund restricțiilor impuse."'''.
== Restricții și precizări ==
== Restricții și precizări ==
* 0 ⩽ n ⩽ 100
* 0 ⩽ n ⩽ 100
* 0 ⩽ numar ⩽ 1.000.000.000
* 0 ⩽ n ⩽ 1.000.000.000
== Exemplu ==
== Exemplu ==
; Intrare
; Intrare
Line 13: Line 13:
: 10 24 37 46 75
: 10 24 37 46 75
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: Datele sunt introduse corect.
: 3
: 3
== Explicație ==  
== Explicație ==  
Produsul celor 5 numere este '''30636000''', şi se termină cu '''3''' zerouri.
Produsul celor 5 numere este '''30636000''', şi se termină cu '''3''' zerouri.
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
# Funcție pentru validarea numărului de intrare
def validare_date_numar(numar):
def validare_date_numar(numar):
     flag = False
     flag = False
     if numar.isdigit():
     if numar.isdigit(): # verifică dacă numărul este un întreg pozitiv
         if 0 <= int(numar) <= 1_000_000_000:
         if 0 < int(numar) <= 100: # verifică dacă numărul se află în intervalul specificat
             flag = True
             flag = True # dacă toate condițiile sunt îndeplinite, returnează 'True'
     return flag
     return flag


 
# Funcție pentru validarea listei de numere de intrare
def validare_date_numere(n):
def validare_date_numere(n, numere):
     flag = False
     flag = False
     if 0 <= int(n) <= 100:
     if len(numere) == n and all(num.isdigit() and int(num) > 0 for num in numere):
        # verifică dacă lista conține exact n numere întregi pozitive
         flag = True
         flag = True
     return flag
     return flag


def nr_zerouri(n, numere):
# Funcție pentru calculul numărului de zerouri dintr-un număr dat
     numere_2 = [0] * n
def nr_zerouri(numar):
     numere_5 = [0] * n
     NRZ = 0
     while numar % 10 == 0:
        NRZ += 1
        numar //= 10
    return NRZ


     # calculam numarul de factori 2 si 5 pentru fiecare numar
if __name__ == "__main__":
     for i in range(n):
     n = input()  # primește numărul de intrare 'n' de la utilizator
         num = numere[i]
     if validare_date_numar(n): # verifică dacă 'n' este valid
         while num % 2 == 0:
        n = int(n)
             numere_2[i] += 1
         numere = input().split()  # primește lista de 'n' numere de la utilizator
             num //= 2
         if validare_date_numere(n, numere): # verifică dacă lista de numere este validă
         while num % 5 == 0:
            print("\nDatele sunt introduse corect.\n")
             numere_5[i] += 1
             produs = 1
            num //= 5
             for num in numere:
                produs *= int(num)  # calculează produsul numerelor din listă
            NRZ = nr_zerouri(produs)  # calculează numărul de zerouri din produs
            print(NRZ)  # afișează numărul de zerouri
         else:
             print("Datele nu corespund restrictiilor impuse.")
    else:
        print("Datele nu corespund restrictiilor impuse.")


    # numaram numarul minim de factori 2 si 5 pentru fiecare numar
    min_2 = min(numere_2)
    min_5 = min(numere_5)
    # adunam toate valorile minime pentru a obtine numarul total de zerouri
    total_zerouri = min_2 + min_5
    return total_zerouri
if __name__ == '__main__':
    n = int(input())
    if validare_date_numere(n):
        print("\nDatele de intrare corespund restricțiilor impuse.\n")
        lista_numere = []
        for i in range(n):
            while True:
                numar = input(f"Introduceți numărul {i + 1}: ")
                if validare_date_numar(numar):
                    lista_numere.append(int(numar))
                    break
                else:
                    print("Numărul introdus nu corespunde restricțiilor impuse.")
        print(f"\nNumărul de zerouri de la sfârşitul scrierii zecimale a produsului: {total_zerouri(lista_numere)}")
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 10:38, 25 April 2023

Cerinţa[edit]

Se dau n numere naturale nenule. Calculaţi numărul de zerouri de la sfârşitul scrierii zecimale a produsului celor n numere.

Date de intrare[edit]

Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spaţii.

Date de ieşire[edit]

Dacă datele sunt introduse corect,pe ecran se va afișa :"Datele sunt introduse corect.",apoi pe un rând nou numărul NRZ, reprezentând valoarea calculată.În cazul contrar,se va afișa pe ecran "Datele nu corespund restricțiilor impuse.".

Restricții și precizări[edit]

  • 0 ⩽ n ⩽ 100
  • 0 ⩽ n ⩽ 1.000.000.000

Exemplu[edit]

Intrare
5
10 24 37 46 75
Ieșire
Datele sunt introduse corect.
3

Explicație[edit]

Produsul celor 5 numere este 30636000, şi se termină cu 3 zerouri.

Rezolvare[edit]

<syntaxhighlight lang="python" line>

  1. Funcție pentru validarea numărului de intrare

def validare_date_numar(numar):

   flag = False
   if numar.isdigit():  # verifică dacă numărul este un întreg pozitiv
       if 0 < int(numar) <= 100:  # verifică dacă numărul se află în intervalul specificat
           flag = True  # dacă toate condițiile sunt îndeplinite, returnează 'True'
   return flag
  1. Funcție pentru validarea listei de numere de intrare

def validare_date_numere(n, numere):

   flag = False
   if len(numere) == n and all(num.isdigit() and int(num) > 0 for num in numere):
       # verifică dacă lista conține exact n numere întregi pozitive
       flag = True
   return flag
  1. Funcție pentru calculul numărului de zerouri dintr-un număr dat

def nr_zerouri(numar):

   NRZ = 0
   while numar % 10 == 0:
       NRZ += 1
       numar //= 10
   return NRZ

if __name__ == "__main__":

   n = input()  # primește numărul de intrare 'n' de la utilizator
   if validare_date_numar(n):  # verifică dacă 'n' este valid
       n = int(n)
       numere = input().split()  # primește lista de 'n' numere de la utilizator
       if validare_date_numere(n, numere):  # verifică dacă lista de numere este validă
           print("\nDatele sunt introduse corect.\n")
           produs = 1
           for num in numere:
               produs *= int(num)  # calculează produsul numerelor din listă
           NRZ = nr_zerouri(produs)  # calculează numărul de zerouri din produs
           print(NRZ)  # afișează numărul de zerouri
       else:
           print("Datele nu corespund restrictiilor impuse.")
   else:
       print("Datele nu corespund restrictiilor impuse.")


</syntaxhighlight>