Cod sursa(job #1430097)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 7 mai 2015 21:30:13
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#define DIM 100010
using namespace std;

ifstream fin ("evaluare.in" );
ofstream fout("evaluare.out");

int N, M, i; char S[DIM];

int expresion();
int term();
int factor();
int number();

int expresion(){
    int rez = term();
    while(S[i] == '+' || S[i] == '-'){
        switch(S[i])
        {
            case '+': {i ++; rez += term(); break;}
            case '-': {i ++; rez -= term(); break;}
        }
    }
    return rez;
}

int term(){
    int rez = factor();
    while(S[i] == '*' || S[i] == '/'){
        switch(S[i])
        {
            case '*': {i ++; rez *= factor(); break;}
            case '/': {i ++; rez /= factor(); break;}
        }
    }
    return rez;
}

int factor(){
    int rez;
    if(S[i] == '('){i ++; rez = expresion(); i ++;}
    else           {      rez = number();}
    return rez;
}

int number(){
    int nr = 0;
    while(S[i] >= '0' && S[i] <= '9')
        nr = nr * 10 + (S[i++] - '0');
    return nr;
}

int main(){
    fin >> S + 1; i = 1;
    fout << expresion();
    return 0;
}