Cod sursa(job #1338114)

Utilizator horiainfoTurcuman Horia horiainfo Data 9 februarie 2015 19:58:38
Problema Evaluarea unei expresii Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.44 kb
#include <fstream>
#include <cstring>
#define NR 100002
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char a[NR];
int poz,d;
int eval();

int numar()
{
    int n=0;
    while(poz<d)
    {
        if(a[poz]>='0' && a[poz]<='9')
            n=n*10+a[poz]-'0';
        else return n;
        poz++;
    }
    return n;
}
int calcul()
{
    int t=0;
    if(a[poz]=='(')
    {
        poz++;
        t=eval();
    }
    else
        if(a[poz]>='0' && a[poz]<='9')
            t=numar();
    while(poz<d)
    {
        if(a[poz]=='*')
        {
            poz++;
            t=t*numar();
        }
        else
        if(a[poz]=='/')
        {
            poz++;
            t=t/numar();
        }
        else
        if(a[poz]=='(')
        {
            poz++;
            t=calcul();
        }
        else
            return t;
    }
    return t;
}
int eval()
{
    int s=0;
    if(a[poz]!='-')
        s=calcul();
    else
    {
        poz++;
        s=calcul();
    }
    while(poz<d)
    {
        if(a[poz]=='+')
        {
            poz++;
            s=s+calcul();
        }
        else
        if(a[poz]=='-')
        {
            poz++;
            s=s-calcul();
        }
        else
           {poz++; return s;}
    }
    return s;
}
int main()
{
    fin.getline(a,NR);
    d=strlen(a);
    fout<<eval()<<'\n';
    return 0;
}