Cod sursa(job #1130047)

Utilizator manutrutaEmanuel Truta manutruta Data 28 februarie 2014 10:59:08
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <cstring>
#include <iostream>
#include <fstream>
using namespace std;

#define MAXS 100005

ifstream f("evaluare.in");
ofstream g("evaluare.out");

char s[MAXS], *p = s;

int termen();
int factor();

int eval()
{
    int nr = termen();
    while (*p == '+' || *p == '-') {
        switch (*p) {
            case '+': p++; nr += termen(); break;
            case '-': p++; nr -= termen(); break;
        }
    }
    return nr;
}

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

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

int main()
{
    f.getline(s, MAXS);
    g << eval() << endl;;

    f.close();
    g.close();
    return 0;
}