Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- map<string,long long>mapa;
- map<string,long long>::iterator it;
- string numero,palavra;
- long long sum,resp;
- vector<long long>vet;
- vector<string>v;
- void preencheMapa(){
- mapa.insert(make_pair("zero",0));
- mapa.insert(make_pair("um",1));
- mapa.insert(make_pair("dois",2));
- mapa.insert(make_pair("tres",3));
- mapa.insert(make_pair("quatro",4));
- mapa.insert(make_pair("cinco",5));
- mapa.insert(make_pair("seis",6));
- mapa.insert(make_pair("sete",7));
- mapa.insert(make_pair("oito",8));
- mapa.insert(make_pair("nove",9));
- mapa.insert(make_pair("dez",10));
- mapa.insert(make_pair("onze",11));
- mapa.insert(make_pair("doze",12));
- mapa.insert(make_pair("treze",13));
- mapa.insert(make_pair("quatorze",14));
- mapa.insert(make_pair("quinze",15));
- mapa.insert(make_pair("dezesseis",16));
- mapa.insert(make_pair("dezessete",17));
- mapa.insert(make_pair("dezoito",18));
- mapa.insert(make_pair("dezenove",19));
- mapa.insert(make_pair("vinte",20));
- mapa.insert(make_pair("trinta",30));
- mapa.insert(make_pair("quarenta",40));
- mapa.insert(make_pair("cinquenta",50));
- mapa.insert(make_pair("sessenta",60));
- mapa.insert(make_pair("setenta",70));
- mapa.insert(make_pair("oitenta",80));
- mapa.insert(make_pair("noventa",90));
- mapa.insert(make_pair("cem",100));
- mapa.insert(make_pair("cento",100));
- mapa.insert(make_pair("duzentos",200));
- mapa.insert(make_pair("trezentos",300));
- mapa.insert(make_pair("quatrocentos",400));
- mapa.insert(make_pair("quinhentos",500));
- mapa.insert(make_pair("seiscentos",600));
- mapa.insert(make_pair("setecentos",700));
- mapa.insert(make_pair("oitocentos",800));
- mapa.insert(make_pair("novecentos",900));
- mapa.insert(make_pair("mil",1000));
- mapa.insert(make_pair("milhao",1000000));
- mapa.insert(make_pair("milhoes",1000000));
- mapa.insert(make_pair("bilhao",1000000000));
- mapa.insert(make_pair("bilhoes",100000000));
- mapa.insert(make_pair("trilhao",1000000000000));
- mapa.insert(make_pair("trilhoes",1000000000000));
- }
- int main()
- {
- preencheMapa();
- ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- cout.tie(NULL);
- while(getline(cin,numero)){
- stringstream ss;
- ss << numero;
- while( ss >> palavra )
- v.push_back( palavra );
- sum = 0;
- resp = 0;
- for(int i=0;i<v.size();i++){
- ///printf("%s\n",v[i].c_str());
- if(v[i]!="e"){
- if(v[i]!="mil" && v[i]!="milhao" && v[i]!="milhoes" &&
- v[i]!="bilhao" && v[i]!="bilhoes" && v[i]!="trilhao" &&
- v[i]!="trilhoes" ){
- it = mapa.find(v[i]);
- if(vet.size() > 0){
- vet.pop_back();
- }
- if(it!= mapa.end()){ /// achou a chave, faz o somatório
- sum += it->second;
- vet.push_back(sum);
- }
- }else if(v[i]=="mil" || v[i]=="milhao" || v[i]=="milhoes" ||
- v[i]=="bilhao" || v[i]=="bilhoes" || v[i]=="trilhao" ||
- v[i]=="trilhoes" ){ /// achei a operação de transformação, multiplico
- if(vet.size() > 0)
- vet.pop_back();
- if(v[0]=="mil" || v[0]=="milhao" || v[0]=="bilhao" || v[0]=="trilhao"){
- sum++;
- }
- if(v[i]=="bilhao" || v[i]=="bilhoes"){
- sum *= 1000000000;
- resp += sum;
- sum = 0;
- }
- if(v[i]=="trilhao" || v[i]=="trilhoes"){
- sum *= 1000000000000;
- resp += sum;
- sum = 0;
- }
- if(v[i]=="milhao" || v[i]=="milhoes"){
- sum *= 1000000;
- resp += sum;
- sum = 0;
- }
- if(v[i]=="mil"){
- sum *= 1000;
- resp += sum;
- sum = 0;
- }
- if(v[i]=="cem" || v[i]=="cento"){
- sum *= 100;
- resp += sum;
- sum = 0;
- }
- }
- }
- }
- for(int i=0;i<vet.size();i++){
- resp+=vet[i]; /// vetor com as unidades
- }
- printf("%llu\n",resp);
- vet.clear();
- v.clear();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement