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)
#include <bits/stdc++.h> using namespace std; ifstream cin("baza.in"); ofstream cout("baza.out"); void inmultire(int a[] , int& n , int x) { int t = 0; for(int i = 1 ; i <= n ; ++i) { a[i] = a[i] * x + t; t = a[i] / 10; a[i] %= 10; } while(t) { a[++n]=t%10; t/=10; } } void adunare(int a[] , int &n , int x) { int t = a[1] + x; a[1]=t%10; t/=10; int i = 2; while(t && i <= n) { int s = a[i] + t; a[i]=s%10; t = s/10; i++; } while(t) { a[++n]=t%10; t/=10; } } int main() { char s[51]; cin >> s; int a[1500]={0} , n = 1; adunare(a , n , s[0]-'a'); for(int i = 1 ; i < strlen(s) ; ++i) inmultire(a , n , 26) , adunare(a , n , s[i]-'a'); for(int i = n ; i >= 1; --i) cout << a[i]; return 0; }