Cod sursa(job #1849887)

Utilizator RobybrasovRobert Hangu Robybrasov Data 17 ianuarie 2017 22:21:05
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <cstdio>
#define MAX_S 100000

using namespace std;

char L[MAX_S];

int readNumber(char* &p) {
    int n = 0;
    for (; *p >= '0' && *p <= '9'; ++p)
        n = 10 * n + *p - '0';
    return n;
}

int term(char*&);
int prod(char*&);

int sum(char* &p) {
    int res = prod(p);
    while (*p != '\n' && *p != ')')
        switch (*p) {
            case '+': res += prod(++p); break;
            case '-': res -= prod(++p); break;
        }
    if (*p == ')')
        ++p;
    return res;
}

int prod(char* &p) {
    int res = term(p);
    while (*p != '\n' && *p != '+' && *p != '-' && *p != ')')
        switch (*p) {
            case '*': res *= term(++p); break;
            case '/': res /= term(++p); break;
        }
    return res;
}

int term(char* &p) {
    int res;
    if (*p == '(')
        res = sum(++p);
    else
        res = readNumber(p);
    return res;
}

int main() {
    FILE *fin = fopen("evaluare.in", "r");
    FILE *fout = fopen("evaluare.out", "w");
    
    fgets(L, MAX_S, fin);
    char *p = L;

    fprintf(fout, "%d", sum(p));

    return 0;
}