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)
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Baza:
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("baza.in");
ofstream fout("baza.out");
int pw[150], ans[150];
char word[55];
void read();
void solve();
void write();
void addTo(int To[], int value);
void multiplyByConstant(int vec[], int value);
int main() {
read();
solve();
write();
return 0;
}
void read() {
fin >> word;
fin.close();
}
void solve() {
int lg = strlen(word);
pw[0] = pw[1] = 1;
for(int i = lg - 1; i >= 0; --i) {
addTo(ans, (int)(word[i] - 'a'));
multiplyByConstant(pw, 26);
}
}
void write() {
for(int i = ans[0]; i > 0; --i) {
fout << ans[i];
}
fout << '\n';
fout.close();
}
void addTo(int To[], int value) {
int toAdd[150];
for(int i = 0; i < 150; ++i) {
toAdd[i] = pw[i];
}
multiplyByConstant(toAdd, value);
while(toAdd[0] > 1 && toAdd[toAdd[0]] == 0) --toAdd[0];
int i = 1, t = 0;
while(i <= To[0] || i <= toAdd[0] || t != 0) {
To[i] = To[i] + toAdd[i] + t;
t = To[i] / 10;
To[i] %= 10;
To[0] = max(To[0], i);
++i;
}
}
void multiplyByConstant(int vec[], int value) {
int t = 0;
for(int i = 1; i <= vec[0] || t != 0; ++i) {
vec[i] = vec[i] * value + t;
t = vec[i] / 10;
vec[i] %= 10;
vec[0] = max(vec[0], i);
}
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #2295 Baza
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2295 Baza de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!