Cod sursa(job #900225)

Utilizator CaligulaGAIVS IVLIVS CAESAR AVGVSTVS GERMANICVS Caligula Data 28 februarie 2013 18:22:10
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 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();
    if (*p=='+' || *p=='-')
        {
            switch (*p)
                {
                    case '+':
                        ++p;
                        r+=termen();
                        break;
                    case '-':
                        ++p;
                        r-=termen();
                        break;
                }
        }
    return r;
}
long long termen()
{
    long long r=factor();
    if (*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;
}