Cod sursa(job #1995391)

Utilizator catalinlupCatalin Lupau catalinlup Data 27 iunie 2017 22:01:57
Problema Evaluarea unei expresii Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
#define INFILE "evaluare.in"
#define OUTFILE "evaluare.out"
#define NMAX 1000
using namespace std;

ifstream in(INFILE);
ofstream out(OUTFILE);

char S[NMAX],*p=S;

void Read(){
    in.getline(S,NMAX-1);
    cout<<S;
}

long termen();
long factor();

long eval(){
    long r=termen();
    while(*p=='+'||*p=='-'){
        switch(*p){
        case '+':
            p++;
            r+=termen();
            break;
        case '-':
            p++;
            r-=termen();
            break;
        }
    }
    return r;
}
long termen(){
    long r=factor();
    while(*p=='*'||*p=='/'){
        switch(*p){
        case '*':
            p++;
            r*=factor();
            break;
        case '/':
            p++;
            r/=factor();
            break;
        }
    }
    return r;
}

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

int main()
{
    Read();
    out<<eval();
    return 0;
}