Cod sursa(job #3182137)

Utilizator banciu_alexiaBanciu Alexia Ioana banciu_alexia Data 8 decembrie 2023 18:02:26
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

ifstream in("evaluare.in");
ofstream out("evaluare.out");

char s[100005];
int cautas(int st, int dr, char s1, char s2)

{
    int nr=0;
    for(int i=dr;i>=st;i--)
    {
        if(s[i]==')')
            nr++;
        if(s[i]=='(')
            nr--;

        if(nr==0 && (s[i]==s1 || s[i]==s2))
            return i;
    }
    return -1;
}


int numar(int st, int dr)
{
    int nr=0;
    for(int i=st;i<=dr;i++)
        nr=nr*10+(s[i]-'0');
        return nr;

}

int solve(int st, int dr)
{
    int poz=cautas(st,dr,'+','-');

    if(poz!=-1)
    {
        int e1,e2;
        e1=solve(st,poz-1);
        e2=solve(poz+1,dr);
        if(s[poz]=='+')
            return e1+e2;
        return e1-e2;
    }
    poz=cautas(st,dr,'*','/');
    if(poz!=-1)
    {
        int e1,e2;
        e1=solve(st,poz-1);
        e2=solve(poz+1,dr);

        if(s[poz]=='*')
            return e1*e2;
        return e1/e2;
    }
    if(s[st]=='(' && s[dr]==')')
        return solve(st+1,dr-1);
    return numar(st,dr);

}



int main()
{
    int st,dr,n;
    char s1,s2;
    in.getline(s,100005);
    n=strlen(s);
    out<<solve(0,n-1);

    return 0;
}