Cod sursa(job #2109895)

Utilizator RaresV227Virjoghe Rares Constantin RaresV227 Data 20 ianuarie 2018 11:11:46
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
///metoda 2
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100005];
int caut(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 nr=0;
    for(int i=st; i<=dr; i++)
        nr=nr*10+(s[i]-'0');
    return nr;
}
int rez(int st, int dr)
{
    int poz=caut(st,dr,'+','-');
    if(poz!=-1)
    {
        int ex1=rez(st,poz-1);
        int ex2=rez(poz+1,dr);
        if(s[poz]=='+')
            return ex1+ex2;
        return ex1-ex2;
    }
    poz=caut(st,dr,'*','/');
    if(poz!=-1)
    {
        int ex1=rez(st,poz-1);
        int ex2=rez(poz+1,dr);
        if(s[poz]=='*')
            return ex1*ex2;
        return ex1/ex2;
    }
    if(s[st]=='(' && s[dr]==')')
        return rez(st+1,dr-1);
    return num(st,dr);
}
int main()
{
    f.getline(s,100005);
    int n=strlen(s);
    g<<rez(0,n-1);

    return 0;
}