Cod sursa(job #2373447)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 7 martie 2019 13:33:05
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.46 kb
#include <fstream>

using namespace std;

ifstream cin("evaluare.in");
ofstream cout("evaluare.out");

const int N=100000+7;

char s[N];
int p;

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

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

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

int factor()
{
        int sgn=1;
        while(s[p]=='-')
        {
                sgn=-sgn;
                p++;
        }
        if(s[p]=='(')
        {
                p++;
                int val=expresie()*sgn;
                p++;
                return val;
        }
        int val=0;
        while('0'<=s[p] && s[p]<='9')
        {
                val=10*val+s[p]-'0';
                p++;
        }
        return val*sgn;
}

int main()
{
        cin.getline(s,N);
        cout<<expresie()<<"\n";
        return 0;
}