Cod sursa(job #1343236)

Utilizator danyro364Savu Ioan Daniel danyro364 Data 15 februarie 2015 00:48:45
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>
#include <cstring>
#include <cctype>
#define nmax 100001
using namespace std;
FILE *f=fopen("evaluare.in","r"),*g=fopen("evaluare.out","w");
int i,lg; char s[nmax];
int evalterm();
int evalfact();
int eval();

int eval()
{
    int x=0;
    if(s[i]=='(')
    {
        i++;
        x=evalterm();
        i++;
        return x;
    }
    while(isdigit(s[i])&&i<=lg)
    {
        x=x*10+s[i]-'0';
        i++;
    }
    return x;
}
int evalfact()
{
    int f=eval();
    while((s[i]=='*'||s[i]=='/')&&i<=lg)
    {
        i++;
        if(s[i-1]=='*')
            f=f*eval();
        else
            f=f/eval();
    }
    return f;
}
int evalterm()
{
    int t=evalfact();
    while((s[i]=='+'||s[i]=='-')&&i<=lg)
    {
        i++;
        if(s[i-1]=='+')
            t=t+evalfact();
        else
            t=t-evalfact();
    }
    return t;
}
int main()
{
    fscanf(f,"%s",s);
    lg=strlen(s);
    fprintf(g,"%d",evalterm());
    fclose(f);
    fclose(g);
    return 0;
}