Cod sursa(job #3182145)

Utilizator andreea_zahaZaharia Andreea andreea_zaha Data 8 decembrie 2023 18:08:59
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;

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

char s[100000];

int cauts(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 solve(int st, int dr)
{
    int poz=cauts(st,dr,'+','-');
    if (poz!=-1)
    {
        int e1=solve(st,poz-1);
        int e2=solve(poz+1, dr);
        if(s[poz]=='+')
            return e1+e2;
        return e1-e2;
    }
    poz=cauts(st,dr,'*','/');
    if (poz!=-1)
    {
        int e1=solve(st,poz-1);
        int 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 num(st,dr);
}

int main()
{
    fin.getline(s,100000);
    int n=strlen(s);
    fout << solve(0,n-1);
    return 0;
}