Cod sursa(job #2219532)

Utilizator NashikAndrei Feodorov Nashik Data 9 iulie 2018 11:25:48
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <cstdio>
#include <cstring>
using namespace std;

int expresie();
int factor();
int termen();
bool is_digit();
int nr();

char v[100005];
int p;

int main()
{
    v[0] = '(';
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    scanf("%s",v+1);
    int n=strlen(v);
    v[n]=')';
    printf("%d",expresie());
    return 0;
}
int factor()
{
    int ans(expresie());
    bool add;
    while(v[p]=='*' or v[p]=='/') {
        add=(v[p]=='*');
        p++;
        ans=(add?ans*expresie():ans/expresie());
    }
    return ans;
}
int termen()
{
    int ans=0;
    bool add=1;
    if(v[p]=='+' or v[p]=='-'){
        add=(v[p]=='+');
        p++;
    }
    ans=(add?1:-1)*factor();
    while(v[p]=='+' or v[p]=='-'){
        add=(v[p]=='+');
        p++;
        ans+=(add?1:-1)*factor();
    }
    return ans;
}

int expresie()
{
    if(is_digit())
        return nr();
    p++;
    int x=termen();
    p++;
    return x;
}
bool is_digit()
{
    return ('0'<=v[p] and v[p]<='9');
}
int nr()
{
    int ans(0);
    while(is_digit()){
        ans=10*ans+v[p]-'0';
        p++;
    }
    return ans;
}