Cod sursa(job #2572942)

Utilizator NashikAndrei Feodorov Nashik Data 5 martie 2020 15:02:37
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.34 kb
//#include <iostream>
#include <fstream>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
int n,ind;
string s;
int eval();
int numar();
int main()
{
    cin>>s;
    n=s.size();
    ind=0;
    cout<<eval();
    return 0;
}
int numar(){
    int num=0;
    while(s[ind]<='9' and s[ind]>='0' and ind<n){
        num*=10;
        num+=s[ind]-'0';
        ind++;
    }
    //cout<<num<<"\n";;
    return num;
}
int eval(){
    int sum=0,semn=1,prod=1;
    while(ind<n){
        //cout<<ind<<" ";
        if(s[ind]=='-'){
            semn=-1;
            ind++;
            continue;
        }
        if(s[ind]=='+'){
            semn=1;
            ind++;
            continue;
        }
        if(s[ind]<='9' and s[ind]>='0'){
            prod=numar();
            while(s[ind]=='*' or s[ind]=='/'){
                if(s[ind]=='/'){
                    ind++;
                    if(s[ind]=='('){
                        ind++;
                        prod/=eval();
                    }
                    else{
                        prod/=numar();
                    }
                }
                else{
                    ind++;
                    if(s[ind]=='('){
                        ind++;
                        prod*=eval();
                    }
                    else
                        prod*=numar();
                }
            }
            sum+=semn*prod;
            semn=1;
            continue;
        }
        if(s[ind]==')'){
            ind++;
            return sum;
        }
        if(s[ind]=='('){
            ind++;
            prod=eval();
            while(s[ind]=='*' or s[ind]=='/'){
                if(s[ind]=='/'){
                    ind++;
                    if(s[ind]=='('){
                        ind++;
                        prod/=eval();
                    }
                    else
                        prod/=numar();
                }
                else{
                    ind++;
                    if(s[ind]=='('){
                        ind++;
                        prod*=eval();
                    }
                    else
                        prod*=numar();
                }
            }
            sum+=semn*prod;
            semn=1;
        }
    }
    return sum;
}