943 - Number Format Translator

All about problems in Volume IX. If there is a thread about your problem, please use it. If not, create one with its number in the subject.

Moderator: Board moderators

943 - Number Format Translator

Postby peterkwan » Sun Oct 25, 2009 4:00 pm

Here is my code. I got WA but I don't know what I have done wrongly. Please give some inputs that my code fails. Thanks.

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;
}
peterkwan
New poster
 
Posts: 16
Joined: Sun Oct 28, 2007 1:54 pm

Return to Volume IX

Who is online

Users browsing this forum: No registered users and 1 guest