Cod sursa(job #2379583)

Utilizator sansRotaru Razvan Andrei sans Data 13 martie 2019 20:37:08
Problema Evaluarea unei expresii Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define MAX 100010
char s[MAX], *p=s;
ll expr();
ll subexpr();
ll eval(){
    ll r = expr();
    while(*p=='+' || *p=='-'){
        switch(*p){
        case '+':
            ++p;
            r+=expr();
            break;
        case '-':
            ++p;
            r-=expr();
            break;
        }
    }
    return r;
}
ll expr(){
    ll r = subexpr();
    while(*p=='*' || *p == '/'){
        switch(*p){
        case '*':
            ++p;
            r*=expr();
            break;
        case '/':
            ++p;
            r/=expr();
            break;
        }
    }
    return r;
}
ll subexpr(){
    ll r = 0;
    if(*p=='('){
        ++p;
        r = eval();
        ++p;
    }
    else{
        while(*p>='0' && *p<='9'){
            r = r * 10 + (*p-'0');
            ++p;
        }
    }
    return r;
}
int main(){
    freopen("evaluare.in", "r", stdin);
    freopen("evaluare.out", "w", stdout);
    fgets(s, MAX, stdin);
    printf("%lld", eval());
}