Cod sursa(job #2550098)

Utilizator xXoctavianXxStanescu Matei Octavian xXoctavianXx Data 18 februarie 2020 13:49:23
Problema Evaluarea unei expresii Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.87 kb
#include <fstream>
#include <cstring>
#include <queue>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");

char c;
int v[100000],res,sign=1,paranteza;
deque<int>termen[100000];
int x,j;
string s;
int etaj=1; 

int main()
{
    cin>>s;
    int n=s.length();
    int i=0;
    while(i<n)
    {
        int t=0;
        if(s[i]=='+')
        {
            x++;
            v[x]=1;
            i++;
        }
        else if(s[i]=='-')
        {
            x++;
            v[x]=2;
            i++;
        }
        else if(s[i]=='*')
        {
            x++;
            v[x]=3;
            i++;
        }
        else if(s[i]=='/')
        {
            x++;
            v[x]=4;
            i++;
        }
        else if(s[i]=='(')
        {
            x++;
            v[x]=5;
            i++;
        }
        else if(s[i]==')')
        {
            int sum = 0;
            while(termen[etaj].size() > 1)
            {
                if(v[x]==1) 
                    sum+=termen[etaj].back();
                if(v[x]==2) 
                    sum-=termen[etaj].back();
                x--;
                termen[etaj].pop_back();
            }
            sum+=termen[etaj].back();
            termen[etaj].pop_back();
            etaj--;
            if(v[x]==3)
            {
                termen[etaj].back()*=sum;
            }
            else if(v[x]==4)
            {
                termen[etaj].back()/=sum;
            }
            else 
                termen[etaj].push_back(sum);
            i++;
        }
        else{
        while('0'<=s[i] && s[i]<='9')
        {
            t=t*10+s[i]-'0';
            i++;
        }
        if(t!=0)
        {
            if(v[x]==3)
            {
                termen[etaj].back() *= t;
                x--;
            }
            else if(v[x]==4)
            {
                 termen[etaj].back()/=t;
                x--;
            }
            else if(v[x]==1)
            {
                 termen[etaj].push_back(t);
            }
           else  if(v[x]==2)
            {
                termen[etaj].push_back(t);
            }
            else  if(v[x]==0)
            {
                termen[etaj].push_back(t);
            }
            else
            {
                etaj++;
                termen[etaj].push_back(t);
                x--;
            }
        }}
    }
    
    int sum = 0;
            while(termen[etaj].size() > 1)
            {
                if(v[x]==1) 
                    sum+=termen[etaj].back();
                if(v[x]==2) 
                    sum-=termen[etaj].back();
                x--;
                termen[etaj].pop_back();
            }
            sum+=termen[etaj].back();
            termen[etaj].pop_back();
    cout<<sum;
    return 0;
}