2295 - Baza

From Bitnami MediaWiki

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>