Cod sursa(job #961151)

Utilizator primulDarie Sergiu primul Data 11 iunie 2013 17:58:52
Problema Eval Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 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;
}