Cod sursa(job #900231)

Utilizator CaligulaGAIVS IVLIVS CAESAR AVGVSTVS GERMANICVS Caligula Data 28 februarie 2013 18:24:21
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include<fstream>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100010],*p=s;
long long termen();
long long factor();
long long eval()
{
    long long r=termen();
    while (*p=='+' || *p=='-')
        {
            switch (*p)
                {
                    case '+':
                        ++p;
                        r+=termen();
                        break;
                    case '-':
                        ++p;
                        r-=termen();
                        break;
                }
        }
    return r;
}
long long termen()
{
    long long r=factor();
    while (*p=='*' || *p=='/')
        {
            switch (*p)
                {
                    case '*':
                        ++p;
                        r*=factor();
                        break;
                    case '/':
                        ++p;
                        r/=factor();
                        break;
                }
        }
    return r;
}
long long factor()
{
    long long r=0;
    if (*p=='(')
        {
            ++p;
            r=eval();
            ++p;
        }
    else
        {
            for (;'0'<=*p && *p<='9';++p)
                r=r*10+*p-'0';
        }
    return r;
}
int main()
{
    f.get(s,100010);
    g<<eval()<<'\n';
    return 0;
}