Cod sursa(job #1676456)

Utilizator pitradaPit-Rada Ionel-Vasile pitrada Data 5 aprilie 2016 22:15:30
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include<iostream>
#include<string.h>
#include<fstream>
using namespace std;
ifstream h("evaluare.in");
ofstream g("evaluare.out");
char a[100001];
int n;
int f(int x,int y)
{
    int v1,v2,w,c=0,i;
    if(a[y]==')')
    {
        c++;
        for(i=y-1;i>=x;i--)
        {
            if(a[i]==')') c++;
            else if(a[i]=='(')
            {
                c--;
                if(c==0) break;
            }
        }
        if(i==x) return f(x+1,y-1);
    }
    c=0;
    for(i=y;i>=x;i--)
    {
        if(a[i]==')') c++;
        else if(a[i]=='(') c--;
        if((a[i]=='+'||a[i]=='-')&&c==0)
        {
            v1=f(x,i-1);
            v2=f(i+1,y);
            if(a[i]=='+')return (v1+v2);
            return v1-v2;
        }
    }
    c=0;
    for(i=y;i>=x;i--)
    {
        if(a[i]==')') c++;
        else if(a[i]=='(') c--;
        if((a[i]=='*'||a[i]=='/')&&c==0)
        {
            v1=f(x,i-1);
            v2=f(i+1,y);
            if(a[i]=='*') return (v1*v2);
            return (v1/v2);
        }
    }
    w=0;
    for(i=x;i<=y;i++)
    {
        w=w*10+(a[i]-'0');
    }
    return w;
}
int main()
{
    h.get(a,100001);
    h.get();
    n=strlen(a);
    g<<f(0,n-1);
    h.close();
    g.close();
    return 0;
}