Cod sursa(job #1822202)

Utilizator cosminmaneaCosmin Manea cosminmanea Data 4 decembrie 2016 15:00:44
Problema Evaluarea unei expresii Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.54 kb
#include <cstdio>
#include <cstring>
#include <cmath>

using namespace std;

int i;
char s[100100];

int numar()
{
    int nr=0;
    while(s[i]>='0' && s[i]<='9')
    {
        nr=nr*10+(s[i]-'0');
        ++i;
    }
    return nr;
}

int evaluare()
{
    int suma=0,p=1;
    while(s[i]!=')')
    {
        if(s[i]=='(')
        {
            ++i;
            p=p*evaluare();
        }
        else if(s[i]=='*')
             {
                 ++i;
                 if(s[i]=='(')
                {
                     ++i;
                     p=p*evaluare();
                 }
                 else p=p*numar();
             }
        else if(s[i]=='/')
             {
                 ++i;
                 if(s[i]=='(')
                 {
                     ++i;
                     p=p/evaluare();
                 }
                 else p=p/numar();
             }
        else if(s[i]>='0' && s[i]<='9') p=p*numar();
        else if(s[i]=='+')
             {
                 suma+=p;
                 p=1;
                 ++i;
             }
        else if(s[i]=='-')
             {
                 suma-=p;
                 p=1;
                 ++i;
             }
    }
    suma+=p;
    suma=abs(suma);
    ++i;
    return suma;
}

int main()
{
    FILE *f=fopen("evaluare.in","r");
    fgets(s,100010,f);
    int n=strlen(s);
    if(s[n-1]=='\n')s[--n]=0;
    s[n]=')';s[n+1]=0;
    fclose(f);
    f=fopen("evaluare.out","w");
    fprintf(f,"%d",evaluare());
    return 0;
}