Cod sursa(job #2044233)

Utilizator alex2kamebossPuscasu Alexandru alex2kameboss Data 21 octombrie 2017 08:13:15
Problema Eval Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <string>

using namespace std;
string s;
vector <long long> var;
int p;
long long expresie(), termen(), factor();

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

long long termen()
{
    long long r=factor();
    while(s[p]=='*')
    {
        if(s[p]=='*')
        {
            p++;
            r*=factor();
        }
    }
    return r;
}

long long factor()
{
    long long r=0;
    if(s[p]=='(')
    {
        p++;
        r=expresie();
        p++;
    }
    else if(s[p]=='[')
    {
        p++;
        r=expresie();
        r*=r;
        p++;
    }
    else if(s[p]=='-')
    {
        p++;
        r=-expresie();
    }
    else if(s[p]=='+')
    {
        p++;
        r=expresie();
    }
    else if('a'<=s[p] && s[p]<='z')
    {
        r=var[s[p]-'a'];
        p++;
    }
    return r;
}
int main()
{
    freopen("eval.in","r",stdin);
    freopen("eval.out","w",stdout);
    int n;
    long long l;
    scanf("%d", &n);
    for(n;n>0;--n)
    {
        scanf("\n%lld", &l);
        var.push_back(l);
    }
    scanf("\n");
    getline(cin,s);
    cout<<expresie();
    return 0;
}