Cod sursa(job #177205)

Utilizator cretuMusina Rares cretu Data 12 aprilie 2008 14:00:22
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <fstream>
#include <string>

using namespace std;

string s;
int p = 0;

long long eval();
long long termen();
long long factor();

int main()
{
    ifstream fin("evaluare.in");
    fin >> s;
    fin.close();
    
    ofstream fout("evaluare.out");
    fout << eval() << "\n";
    fout.close();
    
    return 0;    
}

long long eval()
{
     long long rez = termen();
     while (s[p] == '+' || s[p] == '-')     
     {
          if (s[p] == '+') 
          {
              p++;
              rez += termen();
          }       
          else 
          {
              p++;
              rez -= termen();      
          }
     }
     return rez;
}

long long termen()
{
     long long rez = factor();
     
     while (s[p] == '*' || s[p] == '/')
     {
          if (s[p] == '*')       
          {
              p++;
              rez *= factor();         
          }
          else 
          {
              p++;     
              rez /= factor();
          }
     }
     return rez;
}

long long factor()
{
     long long rez = 0;
     if (s[p] == '(')     
     {
         p++;
         rez = eval();
         p++;         
     }
     else 
     {
         while (s[p] >= '0' && s[p] <= '9')
         {
               rez = rez * 10 + (s[p] - '0');
               p++;
         }
     }
     return rez;
}