Cod sursa(job #916558)

Utilizator CosminRusuCosmin Rusu CosminRusu Data 16 martie 2013 17:30:12
Problema Evaluarea unei expresii Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.94 kb
#include <fstream>
#include <string.h>
using namespace std;

ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
char op[100005], s[100005];
int par[100005];
int kp;
int fac[100005];
int vf_op;
int vf;
int main()
{
    cin.getline(s, 100002);
    for(int i=0; s[i] ; )
    {
        if(isdigit(s[i]))
        {
            fac[++vf]=s[i]-'0';
            while(isdigit(s[++i]))
                    fac[vf]=fac[vf]*10+s[i]-'0';
            continue;
        }
        if(s[i]=='(')
            {
                par[++kp]=vf+1;
                i++;
                continue;
            }
        if(s[i]=='*')
            if(fac[vf-1]==-1 || fac[vf-1]==-2 || vf-1==0)
                {
                    int x=0;
                    while(isdigit(s[++i]))
                        x=x*10+s[i]-'0';
                    fac[vf]=fac[vf]*x;
                    continue;
                }
        if(s[i]=='/')
            if(fac[vf-1]==-1 || fac[vf-1]==-2 || vf-1==0)
                {
                    int x=0;
                    while(isdigit(s[++i]))
                        x=x*10+s[i]-'0';
                    fac[vf]=fac[vf]/x;
                    continue;
                }
        if(s[i]=='+')
            {fac[++vf]=-1; i++ ;continue;}
        if(s[i]=='-')
            {fac[++vf]=-2; i++ ;continue;}
        if(s[i]==')')
            {
                int a=fac[par[kp]], b;
                for(int j=par[kp]+2;j<=vf;j+=2)
                {
                    if(fac[j-1]==-1)
                        a=a+fac[j];
                    else a=a-fac[j];
                }
                fac[par[kp]]=a;
                vf=par[kp];
                --kp;
            }
        ++i;
    }
    int a=fac[1];
    for(int j=3;j<=vf;j+=2)
    {
        if(fac[j-1]==-1)
            a=a+fac[j];
        else a=a-fac[j];
    }

    cout<<a<<'\n';
    cin.close();
    cout.close();
    return 0;
}