1485 - Jumatate 1
Sursa: [1]
Enunt
Se citește un număr natural n. Acest număr se “împarte” în alte două numere x și y, astfel: x este format din cifrele din prima jumătate a lui n, y este format din cifrele din a doua jumătate a lui n. Dacă n are număr impar de cifre, cifra din mijloc va fi prima cifră a lui y. De exemplu, dacă n=88132, atunci x=88, iar y=132.
Cerinţa
Să se determine cel mai mare divizor comun al lui x și y.
Date de intrare
Fișierul de intrare jumatate1.in conține pe prima linie numărul n.
Date de ieșire
Fișierul de ieșire jumatate1.out va conține pe prima linie cel mai mare divizor comun al lui x și y.
Restricţii şi precizări
- Numărul n va avea cel mult 16 cifre.
Exemplu
- jumatate1.in
- 88132
- jumatate1.out
- 44
Explicație
Numărul x este 88 iar numărul y este 132. Cel mai mare divizor comun al lor este 44.
Rezolvare
<syntaxhighlight lang="python" line>
import math
- Citirea datelor de intrare din fisier
with open("jumatate1.in", "r") as f_in:
numar = f_in.readline().strip()
- Verificarea validității datelor de intrare
if not numar.isdigit():
print("Numarul introdus nu este valid.") exit()
elif len(numar) > 16:
print("Numarul introdus este prea mare.") exit()
- Determinarea numerelor x si y
lungime_numar = len(numar) if lungime_numar % 2 == 0:
x = numar[:lungime_numar//2] y = numar[lungime_numar//2:]
else:
x = numar[:(lungime_numar-1)//2] y = numar[(lungime_numar-1)//2:]
if y[0] == '0': y = numar[(lungime_numar-1)//2:(lungime_numar+1)//2] + numar[(lungime_numar+1)//2:]
- Calcularea celui mai mare divizor comun
cmmd = math.gcd(int(x), int(y))
- Scrierea rezultatului in fisierul de iesire
with open("jumatate1.out", "w") as f_out:
f_out.write(str(cmmd))
print("Numarul introdus este valid.")
</syntaxhighlight>