Cod sursa(job #2109964)

Utilizator MarianConstantinMarian Constantin MarianConstantin Data 20 ianuarie 2018 11:49:02
Problema Evaluarea unei expresii Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

char a[100010], n;

int cautasemn(int st, int dr)
{
    int nr=0, poz1=-1, poz2=-1;
    for (int i=st; i<=dr; i++)
    {
        if ((a[i]=='-' || a[i]=='+') && nr==0)
        {
            poz1=i;
        }
        if ((a[i]=='*' || a[i]=='/') && nr==0)
        {
            poz2=i;
        }
        if (a[i]=='(')
            nr++;
        if (a[i]==')')
            nr--;
    }
    if (poz1!=-1)
        return poz1;
    return poz2;
}

int valoare(char x)
{
    return x-48;
}

long long num(int st, int dr)
{
    long long numar=0;
    for (int i=st; i<=dr; i++)
        numar=numar*10+valoare(a[i]);
    return numar;
}

long long ex(int st, int dr)
{
    int semn=cautasemn(st, dr);
    if (semn!=-1)
    {
        int e1=ex(st, semn-1), e2=ex(semn+1, dr);
        if (a[semn]=='-')
            return e1-e2;
        if (a[semn]=='+')
            return e1+e2;
        if (a[semn]=='*')
            return e1*e2;
        return e1/e2;
    }
    if (a[st]=='(' && a[dr]==')')
        return ex(st+1, dr-1);
    return num(st, dr);
}

int main()
{
    ifstream fin("evaluare.in");
    ofstream fout("evaluare.out");
    fin.getline(a, 100010);
    n=strlen(a);
    fout << ex(0, n-1);
    return 0;
}