Cod sursa(job #2656985)

Utilizator NashikAndrei Feodorov Nashik Data 9 octombrie 2020 13:05:34
Problema Evaluarea unei expresii Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.6 kb
//#include <iostream>
#include <fstream>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
int ind,n;
string s;
bool cifra(){
    if(ind==n)
        return false;
    char a=s[ind];
    if(a<='9' and a>='0')
        return true;
    return false;
}
long long numar(){
    int sum=0;
    while(cifra()==true){
        sum*=10;
        sum+=s[ind]-'0';
        ind++;
    }
    return sum;
}
long long eval(){
    int sum=0,prod=1,semn=1;
    while(ind<n){
        //cout<<"|"<<ind<<"|";
        //cout<<sum<<"\n";
        if(s[ind]==')'){
            ind++;
            return sum;
        }
        if(s[ind]=='+'){
            semn=1;
            ind++;
            continue;
        }
        if(s[ind]=='-'){
            semn=-1;
            ind++;
            continue;
        }
        if(cifra()==true){
            prod=numar();
            //cout<<prod<<"\n";
            while(s[ind]=='*' or s[ind]=='/'){
                if(s[ind]=='*'){
                    ind++;
                    if(s[ind]=='('){
                        ind++;
                        prod*=eval();
                    }
                    else{
                        prod*=numar();
                    }
                }
                else{
                    if(s[ind]=='/'){
                        ind++;
                        if(s[ind]=='('){
                            ind++;
                            prod/=eval();
                        }
                        else{
                            prod/=numar();
                        }
                    }
                }
            }
            //cout<<prod<<"\n"<<sum<<"\n\n\n";
            sum+=semn*prod;
            continue;
        }
        if(s[ind]=='('){
            ind++;
            prod=eval();
            if(s[ind]=='*'){
                ind++;
                if(s[ind]=='('){
                    ind++;
                    prod*=eval();
                }
                else{
                    prod*=numar();
                }
            }
            else{
                if(s[ind]=='/'){
                    ind++;
                    if(s[ind]=='('){
                        ind++;
                        prod/=eval();
                    }
                    else{
                        prod/=numar();
                    }
                }
            }
            sum+=semn*prod;
            continue;
        }
    }
    return sum;
}
int main()
{
    cin>>s;
    n=s.size();
    ind=0;
    cout<<eval();
    return 0;
}