Cod sursa(job #1134905)

Utilizator toncuvasileToncu Vasile toncuvasile Data 7 martie 2014 00:03:48
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
// Infoarena. Arhiva Educationala.
// Evaluarea Expresiilor.
#include<iostream>
#include<fstream>
using namespace std;

char E[100005],*p=E;

int evalueaza();
int termen();
int factor();

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

    cin>>E;

    cout<<evalueaza();

}

int evalueaza(){
    int r=termen();
    while(*p=='+' || *p=='-'){
        switch(*p){
            case('+'): ++p;
                       r+=termen();
                       break;
            case('-'): ++p;
                        r-=termen();
                        break;
        }
    }

    return r;
}


int termen(){
    int r=factor();
    while(*p=='*' || *p=='/'){
        switch(*p){
            case('*'): ++p;
                       r*=factor();
                       break;
            case('/'): ++p;
                        r/=factor();
                        break;
        }
    }
    return r;

}

int factor(){
    int r=0;
    if(*p=='('){
        ++p;
        r=evalueaza();
        ++p;
    }else{
        while(*p>='0' && *p<='9'){
            r=10*r+(*p)-'0';
            ++p;
        }
    }
    return r;
}