2001 - Huge Control

From Bitnami MediaWiki
Revision as of 17:09, 20 April 2023 by Cata (talk | contribs) (Pagină nouă: Cifra de control a unui număr se obţine efectuând suma cifrelor sale, apoi suma cifrelor acestei sume etc. până se obţine o sumă formată dintr-o singură cifră. De exemplu, cifra de control a numărului 713 este 2. (7 + 1 + 3 = 11, 1 + 1 = 2). Un număr de tip Huge este un număr natural de maxim 1.000.000 de cifre. ==Cerința== În fișierul hugecontrol.in se găsește memorat un număr N, de tip Huge. Calculati și afișati cifra de control a numărului. ==Date...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cifra de control a unui număr se obţine efectuând suma cifrelor sale, apoi suma cifrelor acestei sume etc. până se obţine o sumă formată dintr-o singură cifră. De exemplu, cifra de control a numărului 713 este 2. (7 + 1 + 3 = 11, 1 + 1 = 2).

Un număr de tip Huge este un număr natural de maxim 1.000.000 de cifre.

Cerința

În fișierul hugecontrol.in se găsește memorat un număr N, de tip Huge. Calculati și afișati cifra de control a numărului.

Date de intrare

Programul citește din fișierul de intrare hugecontrol.in numărul N, de tip Huge.

Date de ieșire

Programul va afișa în fișierul de ieșire hugecontrol.out numărul digit, reprezentând cifra de control a lui N.

Restricții și precizări

N este un număr cu proprietăți caracteristice tipului Huge.

Exemplu

Intrare

713

Ieșire

2

Explicație

7 + 1 + 3 = 11, 1 + 1 = 2

Rezolvare

<syntaxhighlight lang="python"> def is_valid_number(n):

   return n.isdigit() and len(n) <= 1000000


def compute_control_digit(n):

   nr = 0
   for c in n:
       nr = nr * 10 + int(c)
       nr %= 9
   return 9 if nr == 0 else nr


def main():

   with open("hugecontrol.in", "r") as fin, open("hugecontrol.out", "w") as fout:
       n = fin.readline().strip()
       if not is_valid_number(n):
           print("Invalid input")
           return
       control_digit = compute_control_digit(n)
       fout.write(str(control_digit))


if __name__ == "__main__":

   main()

</syntaxhighlight>

Explicație cod

Acest cod verifica daca un numar primit ca input este valid si apoi calculeaza cifra de control a numarului respectiv. Mai exact, functia "is_valid_number" returneaza True daca numarul este format doar din cifre si are lungimea mai mica sau egala cu un milion, iar functia "compute_control_digit" calculeaza cifra de control a numarului folosind o formula matematica specifica. Functia "main" citeste input-ul din fisierul "hugecontrol.in", verifica daca numarul este valid folosind functia "is_valid_number", calculeaza cifra de control folosind functia "compute_control_digit" si scrie rezultatul in fisierul "hugecontrol.out".