Cod sursa(job #1803074)

Utilizator nick12nicolae mihalache nick12 Data 10 noiembrie 2016 22:27:37
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>

using namespace std;
const long M = 100010;
char S[M], *p=S;
long termen();
long factor();

long eval()
{
    long r = termen();
    while (*p == '+' || *p == '-')
    {
        if (*p == '+')
        {++p; r+=termen();  break; }
        if (*p == '-')
        {
            ++p;
            r -=termen(); break;
        }

    }
    return r;
}

long termen()
{
    long r  = factor();
        while (*p == '*' || *p == '/')
    {
        if (*p == '*')
        {++p; r*=factor();  break; }
        if (*p == '/')
        {
            ++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()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    scanf("%s",S);
    printf("%ld",eval());
    return 0;
}