Cod sursa(job #2412136)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 21 aprilie 2019 18:10:26
Problema Evaluarea unei expresii Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>

using namespace std;

int termen();
int factor();
int expresie();

const int N=(int)1e5+7;
char s[N];
int j;

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

int termen()
{
        int r=factor();
        while(s[j]=='/' || s[j]=='*')
        {
                j++;
                if(s[j-1]=='*') r*=termen(); else r/=termen();
        }
        return r;
}

int factor()
{
        int sng=1;
        while(s[j]=='-') sng=-sng, j++;
        if(s[j]=='(')
        {
                j++;
                int r=expresie();
                j++;
                return r*sng;
        }
        int r=0;
        while('0'<=s[j] && s[j]<='9') r=10*r+(s[j]-'0'), j++;
        return r*sng;
}

int main()
{
        freopen("evaluare.in","r",stdin); freopen("evaluare.out","w",stdout);
        cin.getline(s,N); cout<<expresie()<<"\n";
}