Cod sursa(job #2223291)

Utilizator MaraPMara P MaraP Data 19 iulie 2018 17:21:07
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.54 kb
#include <iostream>
#include<string.h>
#include<fstream>
using namespace std;
char s[10000];
int plusminus(int stanga, int dreapta)
{
    int nr=0;
    for(int i=dreapta;i>=stanga;i--)
    {
        if((s[i]=='+'||s[i]=='-')&&nr==0)
            return i;
        if(s[i]==')')
            nr++;
        if(s[i]=='(')
            nr--;
    }
    return -1;
}
int orislash(int stanga, int dreapta)
{
    int nr=0;
    for(int i=dreapta;i>=stanga;i--)
    {
        if(s[i]=='*'||s[i]=='/')
            return i;
        if(s[i]==')')
            nr++;
        if(s[i]=='(')
            nr--;
    }
    return -1;
}
int numar(int stanga, int dreapta)
{
    int nr=0;
    for(int i=stanga;i<=dreapta;i++)
        nr=nr*10+s[i]-'0';
    return nr;
}
int eval(int st, int dr)
{
    int p=plusminus(st,dr);
    if(p!=-1)
    {
        if(s[p]=='+')
            return eval(st,p-1)+eval(p+1,dr);
        if(s[p]=='-')
            return eval(st,p-1)-eval(p+1,dr);
    }
    else
    {
        p=orislash(st,dr);
        if(p!=-1)
        {
        if(s[p]=='*')
            return eval(st,p-1)*eval(p+1,dr);
        if(s[p]=='/')
            return eval(st,p-1)/eval(p+1,dr);
        }
        else
        {
            if(s[st]=='('&&s[dr]==')')
                eval(st+1,dr-1);
            else
                return numar(st,dr);
        }
    }
}
int main()
{
    ifstream fin("evaluare.in");
    ofstream fout("evaluare.out");
    fin.getline(s,100000);
    fout<<eval(0,strlen(s)-1);
    return 0;
}