Cod sursa(job #597114)

Utilizator ion_calimanUAIC Ion Caliman ion_caliman Data 21 iunie 2011 10:38:50
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>

using namespace std;

string s;

int s2i(int left, int right)
{
    int t=0;
    for (int i=left; i<=right; i++)
        t=t*10+s[i]-'0';
    return t;
}

int eval(int left, int right, int r)
{
    int i,p1,p2,pp;
    p1=p2=pp=0;
    for (i=left; i<=right; i++)
    if (s[i]=='(') pp++;
    else if (s[i]==')') pp--;
    else if (pp==0)
    {
        if (s[i]=='+') return eval(left, i-1,1)+eval(i+1,right,1)*r; else
        if (s[i]=='-') return eval(left, i-1,1)-eval(i+1,right,-1)*r; else
        if (s[i]=='*') p1=i; else
        if (s[i]=='/') p2=i;
    }
    if (p1>p2) return eval(left,p1-1,1)*eval(p1+1,right,1); else
    if (p2>0) return eval(left,p2-1,1)/eval(p2+1,right,1); else
    if (s[left]=='(') return eval(left+1,right-1,1); else
    return s2i(left,right);
}

int main()
{
    ifstream f("evaluare.in");
    ofstream g("evaluare.out");

    f >> s;
    g << eval(0,s.size()-1,1);
    return 0;
}