Cod sursa(job #2011078)

Utilizator roitainNiculae Cristian roitain Data 15 august 2017 01:20:27
Problema Evaluarea unei expresii Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;

char s[101101];
char *p = s;

long long factor();
long long element();

long long operatie(){
    long long result = factor();
    while(*p!=NULL && (*p == '+' || *p == '-')){
        switch(*p){
            case '+':    p++;
                    result += factor();
                    break;
            case '-':    p++;
                    result -= factor();
                    break;
        }
    }
    return result;
}

long long factor(){
    long long result = element();
    while(*p!=NULL && (*p == '*' || *p == '/')){
        switch(*p){
            case '*':    p++;
                    result *= element();
                    break;
            case '/':    p++;
                    result /= element();
                    break;
        }
    }
    return result;
}

long long element(){
    long long result;
    if(*p == '('){
        p++;
        result = operatie();
        p++;

    }else{
        long long el = 0;
        while(*p!=NULL && strchr("123456790",*p)!=NULL){
            el = el*10 + (*p - '0');
            p++;
        }
        result = el;
    }

    return result;
}

int main(){
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    cin.getline(s,101101);
    cout<<operatie();
    return 0;
}