Cod sursa(job #930154)

Utilizator andrettiAndretti Naiden andretti Data 27 martie 2013 14:32:37
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<stdio.h>
#include<string.h>
#define maxn 100005
using namespace std;

int k=1;
char e[maxn];

int eval();
int termen();
int factor();

void cit()
{
    scanf("%s",e+1);
}

int factor()
{
    int val=0;
    if(e[k]=='(') { k++; return eval(); }

    while(e[k]>='0' && e[k]<='9') { val=val*10+e[k]-'0'; k++; }
    return val;
}

int termen()
{
    int val;
    val=factor();
    while(e[k]=='*' || e[k]=='/')
    {
        k++;
        if(e[k-1]=='*') val*=factor();
        else val/=factor();
    }
    return val;
}

int eval()
{
    int val;
    val=termen();
    while(e[k]=='+' || e[k]=='-')
    {
        k++;
        if(e[k-1]=='+') val+=termen();
        else val-=termen();
    }
    if(e[k]==')') k++;

    return val;
}

int main()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);

    cit();
    printf("%d",eval());

    fclose(stdin);
    fclose(stdout);
    return 0;
}