Cod sursa(job #2530286)

Utilizator betybety bety bety Data 24 ianuarie 2020 16:47:21
Problema Evaluarea unei expresii Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 kb
#include <fstream>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
int calcul(string s)
{
    int i=0,ppp=0,okkk=0;
    int p=0,ppl=-1,pmin=-1,pinm=-1,pdiv=-1,nr=0;
    i=0;
    ppp=0;
    if(s[0]!='(')
        okkk=1;
    while(i<s.size())
    {
        if(ppp==0 and okkk==1)
            okkk=-1;
        if(s[i]=='(' and okkk!=-1)
            ++ppp,okkk=1;
        else if(s[i]==')' and okkk!=-1)
            --ppp,okkk=1;
        if(s[i]>='0' and s[i]<='9')
            nr=nr*10+s[i]-'0';
        else if(p==0 and s[i]=='+')
        ppl=i;
        else if(p==0 and s[i]=='-')
        pmin=i;
        else if(p==0 and s[i]=='*')
        pinm=i;
        else if(p==0 and s[i]=='/')
        pdiv=i;
        else if(s[i]=='(')
            ++p;
        else if(s[i]==')')
            --p;
        ++i;
    }
    if(okkk==1)
      return calcul(s.substr(1,s.size()-2));
    if(ppl!=-1)
        return calcul(s.substr(0,ppl))+calcul(s.substr(ppl+1,s.size()-ppl-1));
    if(pmin!=-1)
        return calcul(s.substr(0,pmin))-calcul(s.substr(pmin+1,s.size()-pmin-1));
    if(pinm!=-1)
        return calcul(s.substr(0,pinm))*calcul(s.substr(pinm+1,s.size()-pinm-1));
    if(pdiv!=-1)
        return calcul(s.substr(0,pdiv))/calcul(s.substr(pdiv+1,s.size()-pdiv-1));
    return nr;
}
int main()
{
    string s;
    cin>>s;
    cout<<calcul(s);
    return 0;
}