Cod sursa(job #1678807)

Utilizator razvan242Zoltan Razvan-Daniel razvan242 Data 7 aprilie 2016 15:40:08
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#include <cctype>

using namespace std;

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

const int NMAX = 1e5 + 1;

char a[NMAX];
char *p;

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

int main()
{
    fin >> a;
    p = a;
    fout << evalueaza();
    return 0;
}

int evalueaza() {
    int ans = termen();
    while (*p == '+' || *p == '-') {
        if (*p == '+') {
            ++p;
            ans += termen();
        }
        else
            ++p, ans -= termen();
    }
    return ans;
}

int termen() {
    int ans = factor();
    while (*p == '*' || *p == '/') {
        if (*p == '*')
            ++p, ans *= factor();
        else
            ++p, ans /= factor();
    }
    return ans;
}

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