Cod sursa(job #1048742)

Utilizator irinaneaguIrina Neagu irinaneagu Data 6 decembrie 2013 12:45:06
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include<cstdio>
#include<cstring>
int expresie();
int factor();
int termen();
int p;
char s[100001];
int main(){
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    gets(s);
    int rez=0;
    int x=strlen(s);
    p=0;
    while(p<x)
        rez+=expresie();
    printf("%d",rez);
    return 0;
}
int expresie(){
    int sum=termen();
    while(s[p]=='+'||s[p]=='-')
        if(s[p]=='+'){
            p++;
            sum+=termen();}
        else{
            p++;
            sum-=termen();}
    return sum;
}
int termen(){
    int prod=factor();
    while(s[p]=='*'||s[p]=='/')
        if(s[p]=='*'){
            p++;
            prod*=factor();
        }
        else{
            p++;
            prod/=factor();
        }
    return prod;
}
int factor(){
    int semn=1,val=0;
    while(s[p]=='-'){
        semn=-semn;
        p++;}
        if(s[p]=='('){
           p++;
           val=expresie();
           p++;
           return semn*val;}
        while(s[p]>='0'&&s[p]<='9')
            val=val*10+(s[p++]-'0');
    return semn*val;
}