Cod sursa(job #1849490)

Utilizator RobybrasovRobert Hangu Robybrasov Data 17 ianuarie 2017 16:49:43
Problema Evaluarea unei expresii Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <cstdio>
#define MAX_S 100000

using namespace std;

char S[MAX_S];

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

int e1(char*&);

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

int e1(char* &p) {
    int res;
    if (*p == '(')
        res = e(++p);
    else
        res = readNumber(p);
    while (*p != '\n' && *p != '+' && *p != '-' && *p != ')')
        switch (*p) {
            case '*': res *= e1(++p); break;
            case '/': res /= e1(++p); break;
        }
    return res;
}

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

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

    return 0;
}