2295 - Baza
Cerința[edit | edit source]
Mirel a învățat astăzi la școală la ora de matematică despre baze de numerație. De exemplu a învățat cum să transforme un număr dintr-o bază oarecare în baza zece. Pentru acasă a primit următoarea temă:
Pentru un cuvânt dat, se înlocuiește fiecare literă a acestuia cu numărul de litere de dinaintea sa în alfabet, astfel litera a
devine 0
, litera b
devine 1
, litera c
devine 2
ș.a.m.d. , iar cuvântul dat devine un număr în baza 26
.
Să se transforme acest număr în baza zece.
Date de intrare[edit | edit source]
În fișierul baza.in
se citește de pe prima linie un cuvânt, format doar din litere mici ale alfabetului englez.
Date de ieșire[edit | edit source]
În fișierul baza.out
se va afișa pe prima linie un număr, reprezentând valoarea in baza zece a cuvântului din baza 26
.
Restricții și precizări[edit | edit source]
Lungimea cuvântului <= 50
Exemplu:[edit | edit source]
baza.in
abz
baza.out
51
Explicație[edit | edit source]
a
= 0
, b
= 1
, z
= 25
.
abz(26)
= 0 * 26^2 + 1 * 26^1 + 25 * 26^0 = 51(10)
Încărcare soluție[edit | edit source]
Lipește codul aici[edit | edit source]
<syntaxhighlight lang="python" line="1"> import sys
def inmultire(a, n, x):
t = 0 for i in range(1, n+1): a[i] = a[i] * x + t t = a[i] // 10 a[i] %= 10 while t: n += 1 a.append(t % 10) t //= 10
def adunare(a, n, x):
t = a[0] + x a[0] = t % 10 t //= 10 i = 1 while t and i < n: s = a[i] + t a[i] = s % 10 t = s // 10 i += 1 while t: n += 1 a.append(t % 10) t //= 10
def main():
s = input() a = [0] * 1500 n = 1 adunare(a, n, ord(s[0]) - ord('a')) for i in range(1, len(s)): inmultire(a, n, 26) adunare(a, n, ord(s[i]) - ord('a')) for i in range(n-1, -1, -1): print(a[i], end=) sys.stdout.flush()
if __name__ == "__main__":
main()
</syntaxhighlight>