Code: Select all
#include <iostream>
#include <map>
#include <algorithm>
#include <sstream>
using namespace std;
map<string, long long> m;
string& replace_all(string& str,const string& old_val, const string& new_val)
{
string::size_type pos(0);
while((pos=str.find(old_val))!=string::npos)
str.replace(pos,old_val.length(),new_val);
return str;
}
void init() {
m.insert(pair<string,long long>("zero", 0));
m.insert(pair<string,long long>("um", 1));
m.insert(pair<string,long long>("dois", 2));
m.insert(pair<string,long long>("tres", 3));
m.insert(pair<string,long long>("quatro", 4));
m.insert(pair<string,long long>("cinco", 5));
m.insert(pair<string,long long>("seis", 6));
m.insert(pair<string,long long>("sete", 7));
m.insert(pair<string,long long>("oito", 8));
m.insert(pair<string,long long>("nove", 9));
m.insert(pair<string,long long>("dez", 10));
m.insert(pair<string,long long>("onze", 11));
m.insert(pair<string,long long>("doze", 12));
m.insert(pair<string,long long>("treze", 13));
m.insert(pair<string,long long>("catorze", 14));
m.insert(pair<string,long long>("quatorze", 14));
m.insert(pair<string,long long>("quinze", 15));
m.insert(pair<string,long long>("dezasseis", 16));
m.insert(pair<string,long long>("dezesseis", 16));
m.insert(pair<string,long long>("dezassete", 17));
m.insert(pair<string,long long>("dezessete", 17));
m.insert(pair<string,long long>("dezoito", 18));
m.insert(pair<string,long long>("dezanove", 19));
m.insert(pair<string,long long>("dezenove", 19));
m.insert(pair<string,long long>("vinte", 20));
m.insert(pair<string,long long>("trinta", 30));
m.insert(pair<string,long long>("quarenta", 40));
m.insert(pair<string,long long>("cinquenta", 50));
m.insert(pair<string,long long>("sessenta", 60));
m.insert(pair<string,long long>("setenta", 70));
m.insert(pair<string,long long>("oitenta", 80));
m.insert(pair<string,long long>("noventa", 90));
m.insert(pair<string,long long>("cem", 100));
m.insert(pair<string,long long>("cento", 100));
m.insert(pair<string,long long>("duzentos", 200));
m.insert(pair<string,long long>("trezentos", 300));
m.insert(pair<string,long long>("quatrocentos", 400));
m.insert(pair<string,long long>("quinhentos", 500));
m.insert(pair<string,long long>("seiscentos", 600));
m.insert(pair<string,long long>("setecentos", 700));
m.insert(pair<string,long long>("oitocentos", 800));
m.insert(pair<string,long long>("novecentos", 900));
m.insert(pair<string,long long>("mil", 1000));
m.insert(pair<string,long long>("milhao", 1000000));
m.insert(pair<string,long long>("milhoes", 1000000));
m.insert(pair<string,long long>("biliao", (long long) 10000*100000));
m.insert(pair<string,long long>("bilioes", (long long)10000*100000));
m.insert(pair<string,long long>("bilhao",(long long)10000*100000));
m.insert(pair<string,long long>("bilhoes",(long long)10000*100000));
}
main() {
init();
int n;
string str, token;
long long n1, n2, n3, pn;
scanf("%d\n", &n);
printf("%d\n", n);
for (int i=0; i<n; i++) {
getline(cin, str);
str = replace_all(str, ",", " E");
istringstream iss(str);
pn = 1; n2 = 0; n3 = 0;
// cout << str << endl;
while (getline(iss, token, ' ')) {
if (token == "e") {
n2 += pn;
// cout << "N2 = " << n2 << "; P = " << pn << endl;
pn = 1;
}
else if (token == "E") {
n3 += pn;
pn = 1;
}
else {
n1 = m.find(token)->second;
if (n1 >= 1000) {
if (n2 < n1) {
pn = (pn + n2) * n1;
n2 = 0;
}
else
pn *= n1;
// cout << "N2 = " << n2 << "; P = " << pn << endl;
}
else {
if (pn <= n1)
pn *= n1;
else
pn += n1;
// cout << "P = " << pn << endl;
}
}
}
n2 += pn + n3;
cout << n2 << endl;
}
return 0;
}