2295 - Baza

De la Universitas MediaWiki

Cerința

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

Î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

Î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

  • Lungimea cuvântului <= 50

Exemplu:

baza.in

abz

baza.out

51

Explicație

a = 0, b = 1, z = 25.

abz(26) = 0 * 26^2 + 1 * 26^1 + 25 * 26^0 = 51(10)

Încărcare soluție

Lipește codul aici

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()