Advertisement
Riposati

nome para numero - 2097 URI

Jan 26th, 2017
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.79 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. map<string,long long>mapa;
  6. map<string,long long>::iterator it;
  7. string numero,palavra;
  8. long long sum,resp;
  9. vector<long long>vet;
  10. vector<string>v;
  11.  
  12. void preencheMapa(){
  13.     mapa.insert(make_pair("zero",0));
  14.     mapa.insert(make_pair("um",1));
  15.     mapa.insert(make_pair("dois",2));
  16.     mapa.insert(make_pair("tres",3));
  17.     mapa.insert(make_pair("quatro",4));
  18.     mapa.insert(make_pair("cinco",5));
  19.     mapa.insert(make_pair("seis",6));
  20.     mapa.insert(make_pair("sete",7));
  21.     mapa.insert(make_pair("oito",8));
  22.     mapa.insert(make_pair("nove",9));
  23.     mapa.insert(make_pair("dez",10));
  24.     mapa.insert(make_pair("onze",11));
  25.     mapa.insert(make_pair("doze",12));
  26.     mapa.insert(make_pair("treze",13));
  27.     mapa.insert(make_pair("quatorze",14));
  28.     mapa.insert(make_pair("quinze",15));
  29.     mapa.insert(make_pair("dezesseis",16));
  30.     mapa.insert(make_pair("dezessete",17));
  31.     mapa.insert(make_pair("dezoito",18));
  32.     mapa.insert(make_pair("dezenove",19));
  33.     mapa.insert(make_pair("vinte",20));
  34.     mapa.insert(make_pair("trinta",30));
  35.     mapa.insert(make_pair("quarenta",40));
  36.     mapa.insert(make_pair("cinquenta",50));
  37.     mapa.insert(make_pair("sessenta",60));
  38.     mapa.insert(make_pair("setenta",70));
  39.     mapa.insert(make_pair("oitenta",80));
  40.     mapa.insert(make_pair("noventa",90));
  41.     mapa.insert(make_pair("cem",100));
  42.     mapa.insert(make_pair("cento",100));
  43.     mapa.insert(make_pair("duzentos",200));
  44.     mapa.insert(make_pair("trezentos",300));
  45.     mapa.insert(make_pair("quatrocentos",400));
  46.     mapa.insert(make_pair("quinhentos",500));
  47.     mapa.insert(make_pair("seiscentos",600));
  48.     mapa.insert(make_pair("setecentos",700));
  49.     mapa.insert(make_pair("oitocentos",800));
  50.     mapa.insert(make_pair("novecentos",900));
  51.     mapa.insert(make_pair("mil",1000));
  52.     mapa.insert(make_pair("milhao",1000000));
  53.     mapa.insert(make_pair("milhoes",1000000));
  54.     mapa.insert(make_pair("bilhao",1000000000));
  55.     mapa.insert(make_pair("bilhoes",100000000));
  56.     mapa.insert(make_pair("trilhao",1000000000000));
  57.     mapa.insert(make_pair("trilhoes",1000000000000));
  58. }
  59.  
  60. int main()
  61. {
  62.     preencheMapa();
  63.  
  64.     ios_base::sync_with_stdio(false);
  65.     cin.tie(NULL);
  66.     cout.tie(NULL);
  67.  
  68.     while(getline(cin,numero)){
  69.  
  70.         stringstream ss;
  71.         ss << numero;
  72.         while( ss >> palavra )
  73.             v.push_back( palavra );
  74.  
  75.         sum = 0;
  76.         resp = 0;
  77.  
  78.             for(int i=0;i<v.size();i++){
  79.  
  80.                 ///printf("%s\n",v[i].c_str());
  81.  
  82.                 if(v[i]!="e"){
  83.  
  84.                     if(v[i]!="mil" &&  v[i]!="milhao" && v[i]!="milhoes" &&
  85.                        v[i]!="bilhao" && v[i]!="bilhoes" && v[i]!="trilhao" &&
  86.                        v[i]!="trilhoes" ){
  87.  
  88.                     it = mapa.find(v[i]);
  89.  
  90.                     if(vet.size() > 0){
  91.                         vet.pop_back();
  92.                     }
  93.  
  94.                     if(it!= mapa.end()){ /// achou a chave, faz o somatório
  95.  
  96.                         sum += it->second;
  97.                         vet.push_back(sum);
  98.                     }
  99.  
  100.                 }else if(v[i]=="mil" ||  v[i]=="milhao" || v[i]=="milhoes" ||
  101.                        v[i]=="bilhao" || v[i]=="bilhoes" || v[i]=="trilhao" ||
  102.                        v[i]=="trilhoes" ){ /// achei a operação de transformação, multiplico
  103.  
  104.  
  105.                     if(vet.size() > 0)
  106.                         vet.pop_back();
  107.  
  108.                     if(v[0]=="mil" || v[0]=="milhao" || v[0]=="bilhao" || v[0]=="trilhao"){
  109.                         sum++;
  110.                     }
  111.  
  112.                     if(v[i]=="bilhao" || v[i]=="bilhoes"){
  113.  
  114.                         sum *= 1000000000;
  115.                         resp += sum;
  116.                         sum = 0;
  117.                     }
  118.  
  119.                     if(v[i]=="trilhao" || v[i]=="trilhoes"){
  120.  
  121.                         sum *= 1000000000000;
  122.                         resp += sum;
  123.                         sum = 0;
  124.                     }
  125.  
  126.  
  127.                     if(v[i]=="milhao" || v[i]=="milhoes"){
  128.  
  129.                         sum *= 1000000;
  130.                         resp += sum;
  131.                         sum = 0;
  132.                     }
  133.  
  134.                     if(v[i]=="mil"){
  135.  
  136.                         sum *= 1000;
  137.                         resp += sum;
  138.                         sum = 0;
  139.                     }
  140.  
  141.                     if(v[i]=="cem" || v[i]=="cento"){
  142.  
  143.                         sum *= 100;
  144.                         resp += sum;
  145.                         sum = 0;
  146.                     }
  147.                 }
  148.             }
  149.         }
  150.  
  151.         for(int i=0;i<vet.size();i++){
  152.             resp+=vet[i]; /// vetor com as unidades
  153.         }
  154.  
  155.         printf("%llu\n",resp);
  156.         vet.clear();
  157.         v.clear();
  158. }
  159.     return 0;
  160. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement