viernes, 21 de octubre de 2011

727 - Equation - UVA

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <stack>
#define db(a) cout << #a << " = " << a << endl;
using namespace std;
int main ()
{
  char c[2];
  int cont = 0, casos;
  void *p;
  string res = "";
  scanf("%d", &casos);
  gets(c);
  gets(c);
  for (int i = 0; i < casos; i++) {
 res = "";
 stack<char> pila;
  while(1) {
   p = gets(c);
   if (p == NULL) break;
   if (c[0] == '\0') break;
   //original += c[0];
   if (isdigit(c[0])) res += c[0];
   else {
    if (c[0] == ')') {
     while(pila.top() != '(') {
      res += pila.top();
      pila.pop();
     }
     pila.pop();
     continue;
    }
    if (c[0] == '(') {
     pila.push(c[0]);
     continue;
    }    
    if(c[0] != '*' && c[0] != '/' && c[0] != '+' && c[0] != '-') continue;
    if (pila.empty()) {
     pila.push(c[0]);
     continue;
    }
    while(!pila.empty() && pila.top() != '(' && ((pila.top() == '*' || pila.top() == '/')
    || !((pila.top() == '+' || pila.top() == '-') && (c[0] == '*' || c[0] == '/')))) {
      res += pila.top();
      pila.pop();
    }
    pila.push(c[0]);
   }
  }
 while (!pila.empty()) {
  res += pila.top();
  pila.pop();
 }
 //db(original);
 if(i + 1 == casos)
  printf("%s\n", res.c_str());
 else
  printf("%s\n\n", res.c_str());
  }
  return 0;
}

No hay comentarios:

Publicar un comentario