Cod sursa(job #1156931)

Utilizator hopingsteamMatraguna Mihai-Alexandru hopingsteam Data 28 martie 2014 09:43:22
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include    <iostream>
#include    <fstream>

using namespace std;

ifstream fin("evaluare.in");
ofstream fout("evaluare.out");

char S[100005], *p = S;
void read()
{
    fin.getline(S,100005);
}

int calc1();

int getnr()
{
    int r = 0;
    if ( *p == '(' )
    {//We got and expresion
        p += 1; // Skip the '('
        r = calc1();
        p += 1; // Skip the ')'
    }
    else
    {
        while ( *p>='0' && *p<='9' )
        {//We got a number over there!
            r = r*10 + *p - '0';
            p += 1;
        }
    }
    return r;
}

int calc2()
{
    int r = getnr();
    while ( *p=='*' || *p=='/' )
    {
        switch ( *p )
        {
            case '*':
                p += 1;
                r *= getnr();
                break;
            case '/':
                p += 1;
                r /= getnr();
                break;
        }
    }
    return r;
}

int calc1()
{
    int r = calc2();
    while ( *p=='+' || *p=='-' )
    {
        switch ( *p )
        {
            case '+':
                p += 1;
                r += calc2();
                break;
            case '-':
                p += 1;
                r -= calc2();
                break;
        }
    }
    return r;
}

int main()
{
    read();
    fout << calc1();
    return 0;
}