Cod sursa(job #1820189)

Utilizator AcuasPopescu Nicolae-Aurelian Acuas Data 1 decembrie 2016 12:51:44
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <cstdlib>
#include <cstring>
using namespace std;
ifstream h("evaluare.in");
ofstream g("evaluare.out");
char p[100005];
int j=0,n;
long t();
long f();
long e() {
    long r = t();
    while ( p[j]=='+' || p[j]=='-' ) {
        switch ( p[j] ) {
            case '+':
                j++;
                r += t();
                break;
            case '-':
                j++;
                r -= t();
                break;
        }
    }
    return r;
}
long t() {
    long r = f();
    while ( p[j]=='*' || p[j]=='/' ) {
        switch ( p[j] ) {
            case '*' :
                j++;
                r *= f();
                break;
            case '/':
                j++;
                r /= f();
                break;
        }
    }
    return r;
}

long f() {
    long r=0;
    if ( p[j] == '(' ) {
        j++;
        r = e();
        j++;
        } else {
        while (j<=n&& isdigit(p[j]) )  {
            r = r*10 + p[j] - '0';
            j++;
        }
    }
    return r;
}
int main() {
    h.getline(p,100004);
    n=strlen(p);
    g<<e();
    return 0;
}