Cod sursa(job #2554321)

Utilizator rafaelrafyChitan Rafael rafaelrafy Data 22 februarie 2020 19:52:48
Problema Evaluarea unei expresii Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.55 kb
#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100100];
int eval(char s[])
{
    int i=0,ct,semn=1,p=0,st[100100]={0},ok;
    while (s[i])
    {
        ok=0;
        if(s[i]=='(')
        {
            char t[100100]={0};
            int d=1,j=-1;
            for(i++;s[i]&&d;i++)
            {
                t[++j]=s[i];
                if(s[i]==')')
                    d--;
                if(s[i]=='(')
                    d++;
            }
            t[j]=0;
            ct=eval(t);
            ok=1;
        }
        else if(s[i]=='+')
        {
            semn=1;
            i++;
        }
        else if(s[i]=='-')
        {
            semn=2;
            i++;
        }
        else if(s[i]=='*')
        {
            semn=3;
            i++;
        }
        else if(s[i]=='/')
        {
            semn=4;
            i++;
        }
        else
        {
            ct=0;
            ok=1;
            while(s[i]&&strchr("0123456789",s[i]))
            {
                ct=ct*10+s[i]-'0';
                i++;
            }
        }
        if(ok)
        {
            if(semn==1)
                st[++p]=ct;
            else if(semn==2)
                st[++p]=-ct;
            else if(semn==3)
                st[p]*=ct;
            else
                st[p]/=ct;
            semn=0;
        }
    }
    int res=0;
    for(int i=1;i<=p;i++)
        res+=st[i];
    return res;
}
int main(int argc, const char * argv[]) {
    f>>s;
    g<<eval(s);
    return 0;
}