Cod sursa(job #3182128)

Utilizator capitanulsefultauAlexandru Florea capitanulsefultau Data 8 decembrie 2023 17:53:44
Problema Evaluarea unei expresii Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>
#include <string.h>
using namespace std;
char s[10000];
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 && (s1==s[i] || s2==s[i]))
            return i;
    }
    return -1;
}
int num(int st, int dr)
{
    int numar=0;
    for(int i=st; i<=dr; i++)
    {
        numar=numar*10+(s[i]-'0');
    }
    return numar;
}
int rezolv(int st, int dr)
{
    int poz=cautas(st, dr, '+', '-');
    if(poz!=-1)
    {
        int nr1=rezolv(st, poz-1);
        int nr2=rezolv(poz+1, dr);
        if(s[poz]=='+')
            return nr1+nr2;
        return nr1-nr2;
    }
    poz=cautas(st, dr, '*', '/');
    if(poz!=-1)
    {
        int nr1=rezolv(st, poz-1);
        int nr2=rezolv(poz+1, dr);
        if(s[poz]=='*')
            return nr1*nr2;
        return nr1/nr2;
    }
    if(s[st]=='(' && s[dr]==')')
        return rezolv(st+1, dr-1);
    return num(st, dr);
}
int main()
{
    ifstream cin("evaluare.in");
    ofstream cout("evaluare.out");
    cin.getline(s, 10000);
    int n=strlen(s);
    cout<<rezolv(0, n-1);
    return 0;
}