Cod sursa(job #2723158)

Utilizator NashikAndrei Feodorov Nashik Data 13 martie 2021 18:42:27
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.4 kb
//#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
int poz=0,n;
string s;
int numar(){
    int nr=0;
    while(s[poz]<='9' and s[poz]>='0'){
        nr*=10;
        nr+=s[poz]-'0';
        poz++;
        if(poz==n){
            return nr;
        }
    }
    return nr;
}
int eval(){
    int sum=0,semn=1,prod=1;
    while(poz<n){
        if(s[poz]=='+'){
            semn=1;
            poz++;
            continue;
        }
        if(s[poz]=='-'){
            semn=-1;
            poz++;
            continue;
        }
        if(s[poz]<='9' and s[poz]>='0'){
            prod=numar();
            while(s[poz]=='*' or s[poz]=='/'){
                if(s[poz]=='/'){
                    poz++;
                    if(s[poz]=='('){
                        poz++;
                        prod/=eval();
                    }
                    else{
                        prod/=numar();
                    }
                }
                else{
                    poz++;
                    if(s[poz]=='('){
                        poz++;
                        prod*=eval();
                    }
                    else{
                        prod*=numar();
                    }
                }
            }
            sum+=semn*prod;
            prod=1;
        }
        if(s[poz]==')'){
            poz++;
            return sum;
        }
        if(s[poz]=='('){
            poz++;
            prod=eval();
            while(s[poz]=='*' or s[poz]=='/'){
                if(s[poz]=='/'){
                    poz++;
                    if(s[poz]=='('){
                        poz++;
                        prod/=eval();
                    }
                    else{
                        prod/=numar();
                    }
                }
                else{
                    poz++;
                    if(s[poz]=='('){
                        poz++;
                        prod*=eval();
                    }
                    else{
                        prod*=numar();
                    }
                }
            }
            sum+=semn*prod;
            prod=1;
        }
    }
    return sum;
}
int main()
{
    cin>>s;
    n=s.size();
    poz=0;
    cout<<eval();
    return 0;
}
/*
1+2*3+(4+5*6)*(7+8)
*/