Cod sursa(job #1884661)

Utilizator flaviu_2001Craciun Ioan-Flaviu flaviu_2001 Data 18 februarie 2017 23:35:46
Problema Evaluarea unei expresii Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>
#include <cstdio>

using namespace std;

char s[100010], p;

int termen();
int factor();

int eval()
{
    int r = termen();
    while(s[p] == '+' || s[p] == '-'){
        switch(s[p]){
            case '+':
                ++p;
                r += termen();
                break;
            case '-':
                ++p;
                r -= termen();
                break;
        }
    }
    return r;
}

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

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

int main()
{
    ifstream fin ("evaluare.in");
    ofstream fout ("evaluare.out");
    fin.getline(s, 100010);

    fout << eval() << "\n";

    fin.close();
    fout.close();
    return 0;
}