Cod sursa(job #2112504)

Utilizator Roby54151Robert Cojocariu Roby54151 Data 23 ianuarie 2018 16:02:06
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100002];
int numar(int st, int dr)
{
    int nr=0;
    for(int i=st; i<=dr; i++)
        nr=nr*10+s[i]-48;
    return nr;
}
int cautare(int st, int dr, char semn1, char semn2)
{
    int nr=0;
    for(int i=dr;i>=st;i--)
    {
        if(s[i]==')')
            nr++;
        if(s[i]=='(')
            nr--;
        if(nr==0 && (semn1==s[i] || semn2==s[i]))
            return i;
    }
     return -1;
}
int rezolv(int st, int dr)
{
    int p=cautare(st, dr, '+', '-');
    if(p!=-1)
    {
        int x=rezolv(st, p-1);
        int y=rezolv(p+1, dr);
        if(s[p]=='+')
            return x+y;
        return x-y;
    }
    p=cautare(st, dr, '*', '/');
    if(p!=-1)
    {
        int x=rezolv(st, p-1);
        int y=rezolv(p+1, dr);
        if(s[p]=='*')
            return x*y;
        return x/y;
    }
    if(s[st]=='(' && s[dr]==')')
        return rezolv(st+1, dr-1);
    return numar(st, dr);
}
int main()
{
    f.getline(s, 100002);
    int n=strlen(s);
    g<<rezolv(0, n-1);
    return 0;
}